我一直试图使用非标准的HTTPS端口在IIS服务器上发布WCF Web服务。仅在身份验证(通过基本身份验证)之后才可以访问服务器。我为测试目的而创建的Web服务是在Visual Studio中创建WCF Service Application
时默认获得的基础项目。我所做的唯一修改是在web.config
文件中:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.6.1" />
<httpRuntime targetFramework="4.6.1"/>
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<bindings>
<basicHttpBinding>
<binding name="secureHttpBinding">
<security mode="Transport">
<transport clientCredentialType="Basic"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="SoapApi.Service1">
<endpoint address=""
binding="basicHttpBinding"
bindingConfiguration="secureHttpBinding"
contract="SoapApi.IService1"/>
<endpoint address="mex"
binding="mexHttpsBinding"
contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<directoryBrowse enabled="true"/>
</system.webServer>
</configuration>
在本地文件系统上发布服务并配置IIS之后。从本地PC上的浏览器进行身份验证后,我能够访问服务器上的WSDL文件。但是,如果我尝试使用Visual Studio中的Configure WCF Web Service Reference
向导将服务添加到简单的客户端应用程序中,则会收到以下错误消息:
Metadata contains a reference that cannot be resolved:'http://<host>:<port><path>?wsdl'.
和完整的错误消息:
An error occurred while attempting to find services at 'http://<host>:<port><path>?wsdl'. The remote server returned an error: (403) Forbidden.
由于此错误表示我没有访问权限,因此我想为什么不关闭身份验证并尝试是否可以使用。我在IIS中激活了对网站的匿名访问,并取消了基本身份验证。
此外,我在web.config
文件中更改了以下段落:
<basicHttpBinding>
<binding name="secureHttpBinding">
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</basicHttpBinding>
我仍然可以从浏览器访问WSDL文件,但是在将服务引用添加到客户端时仍然出现相同的错误。如果我通过dotnet-svcutil http://<host>:<port><path>?wsdl
如果我尝试在本地添加服务引用,则一切正常,没有任何问题。
其他信息:
.NET Framework 4.6
,它是WCF HTTP Activation
处理程序。IIS_IUSRS
添加到了包含服务的文件夹中。关于为什么会发生这种情况以及如何解决此问题的任何想法?