WCF服务客户端问题

时间:2011-06-13 17:40:13

标签: wcf iis svcutil.exe

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

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>

1 个答案:

答案 0 :(得分:1)

我认为这是相关的错误:

  

HTTP请求未经授权,客户端身份验证方案为“匿名”。   从服务器收到的身份验证标头是“Negotiate”。

Web服务密码是受保护还是使用集成Windows身份验证?如果我没记错的话,svcutil无法使用集成身份验证登录到Web服务。当您使用浏览器时,它可以正常工作,因为它在后台处理Intranet环境中的身份验证。

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