Web services WCF在查看MyService.svc?wsdl时未使用计算机名而不是域名
我的WCF服务似乎使用计算机名而不是域名。当我查看Web services WCF在查看MyService.svc?wsdl时未使用计算机名而不是域名,web-services,wcf,iis,ssl,configuration,Web Services,Wcf,Iis,Ssl,Configuration,我的WCF服务似乎使用计算机名而不是域名。当我查看MyService.svc?wsdl链接时,它会显示我的计算机名 我应该在web.config中的何处添加我的域名?端点地址、基地址或标识 注意:我正在使用SSL,因此它必须是https://www.example.com/myservice.svc我们正在使用更改主机名 WCFExtras是一个小型开源库,允许您编写以下内容来更改主机名: <behaviors> <endpointBehaviors> <
MyService.svc?wsdl
链接时,它会显示我的计算机名
我应该在web.config中的何处添加我的域名?端点地址、基地址或标识
注意:我正在使用SSL,因此它必须是https://www.example.com/myservice.svc
我们正在使用更改主机名
WCFExtras是一个小型开源库,允许您编写以下内容来更改主机名:
<behaviors>
<endpointBehaviors>
<behavior name="xxx">
<wsdlExtensions location="http://some-hostname-visible-from-outside/path-to-a-service/service.svc" singleFile="True" />
</behavior>
...
...
对于IIS7,您不会将其添加到web.config,而是添加到IIS配置文件中
首先,编辑网站的绑定,以便HTTP协议指定主机名(如果尚未指定),这将确保它在HTTP下获得正确的名称
导航到C:\Windows\System32\inetsrv\config并打开applicationHost.config
查找站点部分。您将看到如下内容
<sites>
<site name="Default Web Site" id="1">
<application path="/">
<virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\wwwroot" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:80:puck" />
<binding protocol="net.tcp" bindingInformation="808:*" />
<binding protocol="net.pipe" bindingInformation="*" />
<binding protocol="net.msmq" bindingInformation="localhost" />
<binding protocol="msmq.formatname" bindingInformation="localhost" />
<binding protocol="http" bindingInformation="*:80:puck.idunno.org" />
<binding protocol="http" bindingInformation="*:80:localhost" />
<binding protocol="https" bindingInformation="*:443:" />
</bindings>
</site>
....
</sites>
....
您可以看到http协议的绑定指定了主机头,但https没有。当您进行web浏览时,您不能通过HTTPS使用主机头,但WCF在生成WSDL时仍然使用它-如果找不到主机头,它将返回到机器名
因此,您需要做的就是像这样编辑HTTPS绑定
<binding protocol="https" bindingInformation="*:443:puck" />
将正确的FQDN追加到绑定信息的末尾。重置IIS和WCF应立即获得它
darin已经发布了IIS6解决方案,这篇文章为我解决了这个问题。我需要将我的域名与我的IP地址和IIS中的网站相关联
我在这里添加了解决方案。它应该适合你们所有人,因为它可以在本地、登台和生产上与我一起工作,而无需在iis上进行绑定这些解决方案对我都没有帮助。我可以通过一个非常简单的定制服务工厂来解决这个问题
您尝试过吗?WCF 4.0通过使用请求头的新配置选项在某些情况下解决了此问题:
<behaviors>
<serviceBehaviors>
<behavior name="AutoVaultUploadBehavior">
<useRequestHeadersForMetadataAddress>
<defaultPorts>
<add scheme="https" port="443" />
</defaultPorts>
</useRequestHeadersForMetadataAddress>
虽然这是一篇老文章,但这里有一个答案。 在“服务行为-->服务元数据”下添加服务url
请注意,如果您不添加myService,它将抛出另一个错误。我的生产服务器出现了这个问题。我找到了关于IIS和WCF问题的多主机头的各种文章,但如果您使用SSL,则无法将主机头添加到IIS UI中的网站标识中,只能将其添加到普通HTTP标识中: 但是,您可以通过命令提示符脚本添加SSL主机头,这为我解决了问题:
cscript.exe adsutil.vbs set /w3svc/<site identifier>/SecureBindings ":443:<host header>"
cscript.exe adsutil.vbs集/w3svc//SecureBindings:443:
有关此问题的详细信息,请参阅此链接:要解决此问题,请在web.config文件中配置httpGetEnabled属性和httpsGetEnabled属性
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
如本链接所述
它解决了我的问题,可能是因为我在同一台主机上有多个网站,而且非常简单
<system.serviceModel>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
只需添加
以解决我的问题。
似乎WCF 4.0通过添加以下内容来处理标题
我使用SSL访问WCF服务 感谢卡纳斯·罗伯特。
解决我问题的步骤-
1.在浏览器中生成wsdl并保存到文件(通过在浏览器中点击.svc?wsdl)另存为.wsdl
这是可行的,但我遇到了一个问题,只有我指定的确切域名才能起作用。例如,如果我这样做:**:443:domain.com,则只有domain.com/Service.svc可以工作;如果我这样做:**:443:www.domain.com,则只有www.domain.com/Service.svc可以工作,但不能同时工作。我怎样才能两者兼得?(带有https前缀)看看这是否有帮助。真是个黑客。这是一个已知的错误,因为我看不出共享主机是如何处理的!同样的问题和这个解决方案对我来说非常有效。谢谢http呢?怎么做?简单,容易,正是需要的。我不知道为什么其他人都在建议这些复杂的解决方案。这正是OP想要的。这对我来说很容易!谢谢@Haridharan