WCF服务客户端问题

问题描述:

我正在尝试为IIS 5.1上托管的WCF服务创建一个客户端。我遇到了一个奇怪的问题:我可以通过浏览器访问该服务就好,我看到“你已经创建了一个服务”页面,但每当我尝试运行SvcUtil工具(由同一页面的建议)WCF服务客户端问题

svcutil.exe http://my.host.name/SampleService/SampleService.svc?wsdl 

我得到以下错误:

Error: Cannot obtain Metadata from http://localhost.ms.com/SampleService/SampleS 
ervice.svc?wsdl 

If this is a Windows (R) Communication Foundation service to which you have acce 
ss, please check that you have enabled metadata publishing at the specified addr 
ess. For help enabling metadata publishing, please refer to the MSDN documentat 
ion at http://go.microsoft.com/fwlink/?LinkId=65455. 


WS-Metadata Exchange Error 
URI: http://localhost.ms.com/SampleService/SampleService.svc?wsdl 

Metadata contains a reference that cannot be resolved: 'http://localhost.ms. 
com/SampleService/SampleService.svc?wsdl'. 

The HTTP request is unauthorized with client authentication scheme 'Anonymou 
s'. The authentication header received from the server was 'Negotiate'. 

The remote server returned an error: (401) Unauthorized. 


HTTP GET Error 
URI: http://localhost.ms.com/SampleService/SampleService.svc?wsdl 

There was an error downloading 'http://localhost.ms.com/SampleService/Sample 
Service.svc?wsdl'. 

The request failed with an empty response. 

If you would like more help, type "svcutil /?" 

什么导致这个问题呢?

编辑:它可能是IIS本身的问题?例如错误地设置权限?

编辑:这里是我的web.config:

<?xml version="1.0"?> 
<configuration> 

    <system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    </system.web> 

    <system.serviceModel> 

    <bindings> 
     <basicHttpBinding> 
     <binding name="Basic"> 
      <security mode="None"/> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 

    <services> 
     <service name="DummyService2.SampleService" 
      behaviorConfiguration="DummyService2.SampleServiceBehavior"> 
     <!-- Service Endpoints --> 
     <endpoint address="" binding="basicHttpBinding" contract="DummyService2.ISampleService" 
       bindingConfiguration="Basic" /> 
     <endpoint address="mex" binding="basicHttpBinding" contract="IMetadataExchange" 
       bindingConfiguration="Basic" /> 
     </service> 
    </services> 


    <behaviors> 
     <serviceBehaviors> 
     <behavior name="DummyService2.SampleServiceBehavior"> 
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
      <serviceMetadata httpGetEnabled="true"/> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="true"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    </system.webServer> 

</configuration> 
+0

请发布您的web.config(或app.config)文件。 – 2011-06-13 18:04:04

我认为这是相关的错误:

The HTTP request is unauthorized with client authentication scheme 'Anonymous'. The authentication header received from the server was 'Negotiate'.

是Web服务密码保护或使用集成的Windows身份验证?如果我没有记错,svcutil无法使用集成身份验证登录到Web服务。当您使用浏览器时,它工作得很好,因为它处理Intranet环境的后台验证。

一种方法是手动下载并保存wsdl,然后指向svcutil以使用下载的wsdl文件生成类。您可能必须下载一些wsdl引用的文件并编辑引用。

+0

在IISManager中的 - > Properties-> DirectorySecurity下,我选中了匿名访问,并且指定的帐户可以访问我的WINDOWS \ Temp,WINDOWS \ Microsoft.NET \ Framework \文件夹和我的项目源文件夹。什么? – 2011-06-13 18:33:58