个位达人, 麻烦帮小弟看看. 这个问题, 环境: vs 2008 使用 frame 2.0/3.5 都试了, wse 3.0 
iis 6.0 : 开启匿名, 集成windows 认证.
 1 建立一个 web service       已经 配置 wse 3.0 的环境 + policy + 采用 none 的方式认证
       代码 :using Microsoft.Web.Services3.Design; -- 已经添加了引用
using Microsoft.Web.Services3;[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[Policy("CustomServicePolicy")]public class Service : System.Web.Services.WebService
{
    public Service () { }    [WebMethod]
    public string HelloWorld() {
        return "Hello World-s";
    }
    
}
Service 端 的 webconfig<microsoft.web.services3>
<policy fileName="wse3policyCache.config"/>
<security>
<securityTokenManager>
<add type="Insucomputo.CustomUsernameTokenManager" namespace="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" localName="UsernameToken"/>
</securityTokenManager>
</security>
</microsoft.web.services3>Service 端的 wse3policyCache.config<policies xmlns="http://schemas.microsoft.com/wse/2005/06/policy">
  <extensions>
    <extension name="usernameOverTransportSecurity" type="Microsoft.Web.Services3.Design.UsernameOverTransportAssertion, Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    <extension name="requireActionHeader" type="Microsoft.Web.Services3.Design.RequireActionHeaderAssertion, Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </extensions>
  <policy name="CustomServicePolicy">
    <usernameOverTransportSecurity />
    <requireActionHeader />
  </policy>
</policies>
----------------------------------------------------------------------------------Client 端 的代码-----也启用wse3.0 的配置, 使用client的方式, none 的密码发送方法, policy 名称和service的一样.public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        try
        {
            Service1.ServiceWse proxy = new Service1.ServiceWse();
            //Service1.Service proxy = new Service1.Service();
            UsernameToken token = new UsernameToken("edgar", "clave", PasswordOption.SendPlainText);            proxy.SetClientCredential(token);
            proxy.SetPolicy("CustomServicePolicy");
           
           // 加上下面几句也不通
           // proxy.Url = "http://localhost:8080/WebService_Ok_Sample/Service.asmx";
           // proxy.PreAuthenticate = true;
           // proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
          //  proxy.UseDefaultCredentials = true;
           
            
            Label1.Text = proxy.HelloWorld();
        }
        catch (Exception ex)
        {
            Label1.Text = ex.ToString();
        }
    }
}   client 端的 web.config<microsoft.web.services3>
<policy fileName="wse3policyCache.config"/>
</microsoft.web.services3>
client 端的wse3policyCache.config:<policies xmlns="http://schemas.microsoft.com/wse/2005/06/policy">
  <extensions>
    <extension name="usernameOverTransportSecurity" type="Microsoft.Web.Services3.Design.UsernameOverTransportAssertion, Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    <extension name="requireActionHeader" type="Microsoft.Web.Services3.Design.RequireActionHeaderAssertion, Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </extensions>
  <policy name="CustomServicePolicy">
    <usernameOverTransportSecurity />
    <requireActionHeader />
  </policy>
</policies>--------------------------------------------------------
报错:System.Net.WebException: 请求因 HTTP 状态 401 失败: Unauthorized。 在 System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall) 在 System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) 在 Service1.ServiceWse.HelloWorld() 在 _Default.Button1_Click(Object sender, EventArgs e) 
-----------------------------多谢 个位了 !!   

解决方案 »

  1.   

    ... ...
    System.Net.ServicePointManager.Expect100Continue = false;
      

  2.   

    在WebServer所有的磁盘目录加上IIS来宾帐号的访问权限
    WEB1.Service ws1 = new WebServer_Test.WEB1.Service();
    ws1.Credentials = System.Net.CredentialCache.DefaultCredentials;
      

  3.   

    谢谢我试过了 上面的方法 
    如: 加上下面几句也不通
               proxy.Url = "http://localhost:8080/WebService_Ok_Sample/Service.asmx";
              proxy.PreAuthenticate = true;
               proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
               proxy.UseDefaultCredentials = true; 
    还有, 这句 是在server 端还是 client 端
    System.Net.ServicePointManager.Expect100Continue = false;