我有一个在IIS 7.5中托管的WCF服务。 我有两台服务器,一台用于测试,另一台用于生产。
该服务在测试服务器上运行正常,但在生产服务器上我有以下错误。
当我访问地址http://..../service.svc
时,我可以看到默认页面:
您已创建了一项服务。
要测试此服务,您需要创建一个客户端并使用它来调用该服务。您可以使用命令行中的svcutil.exe工具执行此操作,语法如下:
svcutil.exe http://..../service.svc?wsdl
这将生成包含客户端类的配置文件和代码文件。将这两个文件添加到客户端应用程序,并使用生成的客户端类来调用服务。
但是当我点击wsdl链接时,我无法访问wsdl页面。它将我返回到此默认网页,没有任何错误。我怀疑网络/防火墙授权错误,但有人有这样的经历吗?
测试和生产服务器的所有IIS设置都相同。
谢谢你,最诚挚的问候。
答案 0 :(得分:15)
有同样的问题。我通过将httpsGetEnabled添加到serviceBehaviors>这样的行为来修复它:
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
也许它可以帮助别人。不要以为你需要这个提示4年后=)
答案 1 :(得分:14)
您基本上需要三件事来支持浏览WDL服务的WSDL:
因此,服务器端的配置可能看起来像这样(加上更多东西):
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="MetadataBehavior">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="MetadataBehavior" name="YourService">
<endpoint address=""
binding="basicHttpBinding"
contract="IYourService" />
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
点1和2由此处处理:
<serviceMetadata httpGetEnabled="true" />
您需要在<service>
标记中引用该服务行为才能使其生效。
点3(MEX端点)是此部分:
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
对于http,请使用mexHttpBinding
,IMetadataExchange
合同是用于元数据交换的WCF系统合同。
答案 2 :(得分:2)
我知道答案已经很晚了,但我遇到了同样的问题,解决方案是:
在服务[ServiceContract]
上实施的界面上添加标记[OperationContract]
和.svc
。当您选择WCF Service
但我删除了界面并创建了自己的界面时,Visual Studio会创建界面。
[ServiceContract]
public interface IService1
{
[OperationContract]
void DoWork();
}
我希望能帮助别人。
答案 3 :(得分:-1)
是的,问题在于发布元数据。只需添加一个提示。您还可以使用代码添加服务元数据,如下所示:
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
host.Description.Behaviors.Add(smb);
此处有更多详情: http://msdn.microsoft.com/en-us/library/aa738489%28v=vs.110%29.aspx