我已经看到很多关于此的问题,我花了一天时间研究并尝试修复它,但我画了一个空白。
我想将WCF服务部署到使用HTTPS连接并使用基本身份验证的服务器上。这是我的服务web.config
我使用一个非常简单的计算器作为测试,它有一个方法可以将两个数字相加。
<configuration>
<system.web>
<compilation debug="false" targetFramework="4.0" />
<customErrors mode="Off" />
</system.web>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="UsernameWithTransport">
<security mode="Transport">
<transport clientCredentialType="Basic" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service name="Service">
<endpoint address="https://myserver.mydomain.co.uk/CalculatorService"
binding="wsHttpBinding"
bindingConfiguration="UsernameWithTransport"
name="BasicEndpoint"
contract="TestCalculator" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
在IIS 6.0中,我启用了基本身份验证并需要HTTPS。
我可以浏览.svc文件并询问我的凭据。我提供它们并显示默认页面。不过它说:
您已创建了一项服务。
要测试此服务,您需要创建一个客户端并将其用于 打电话给服务。您可以使用svcutil.exe工具执行此操作 命令行,语法如下:
svcutil.exe的 http://myserver.mydomain.co.uk/CalculatorService/Service.svc?wsdl
这将生成一个配置文件和一个包含的代码文件 客户端类。将这两个文件添加到客户端应用程序并使用 生成的客户端类来调用服务。例如:......
基本上,问题似乎是.wsdl的路径是http://而不是https://我觉得我不明白为什么。
我现在正在尝试创建一个C#控制台应用程序来测试使用该服务。我无法直接添加对.svc路径的引用,因为它只是在循环中四处走动,询问我的用户名和密码。如果我添加对.svc?wsdl的引用,那么它确实有效但随后调用该服务会产生“Method not allowed”,因为它试图使用HTTP而不是HTTPS。
希望我已经足够好了。谢谢你的帮助。
答案 0 :(得分:0)
您需要HTTPS,但同时只允许通过HTTP使用WSDL。改变这个:
<serviceMetadata httpGetEnabled="true"/>
对此:
<serviceMetadata httpsGetEnabled="true"/>
现在您将能够通过https://..../....svc?wsdl访问WSDL,但您仍需要进行身份验证,因为身份验证对于您部署的站点而言是全局的。