通常当我实施第三方WCF网络服务时,我会得到一个以.svc
扩展名结尾的网址。
我刚刚在VS2010中创建了一个WCF Web服务,我可以运行该服务,但我在测试客户端中看不到任何以.svc
扩展名结尾的URL。
为了获得这样的URL,我还需要做些什么吗?因为通常从那里人们能够通过添加?wsdl
来获得WSDL,如:
http://site.com/service1.svc?wsdl
如何在我的网络服务中生成这样的网址?
这就是我在App.Config中所拥有的:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<compilation debug="true" />
</system.web>
<!-- When deploying the service library project, the content of the config file must be added to the host's
app.config file. System.Configuration does not support config files for libraries. -->
<system.serviceModel>
<services>
<service name="TestWebservice.Test">
<endpoint address="" binding="wsHttpBinding" contract="TestWebservice.ITest">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8732/Design_Time_Addresses/TestWebservice/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- 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="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
我从配置文件中删除了mexHttpBinding
端点。当我启动我的Web服务时,它会自动显示WSDL的URL:
http://localhost:8732/Design_Time_Addresses/TestWebservice/?wsdl
/
部分之前的?wsdl
似乎 非常 重要。否则它将无法工作。
但这仍然让我想到了我的最后一个问题。如何指定.svc
文件的URL?我想要一个类似于:http://localhost:8732/Design_Time_Addresses/TestWebservice/Test.svc?wsdl
我进一步了。我读到了这个:http://msdn.microsoft.com/en-us/library/aa751792.aspx
所以我使用以下代码在项目的根目录中创建了一个Test.svc
文件:
<% @ServiceHost Service="TestWebservice.ITest" %>
然后我尝试通过以下网址访问我的svc
文件,但两者都不适用于我:
http://localhost:8732/Design_Time_Addresses/TestWebservice/Test.svc
http://localhost:8732/Design_Time_Addresses/Test.svc
甚至可以在Visual Studio中托管svc
吗?或者我真的需要先在IIS中托管它吗?
我终于有了它的工作!我将mexHttpBinding
重新添加到我的App.Config。
我安装了IIS7。将Web服务发布到我的C:\
驱动器中的文件夹。然后在IIS中映射该文件夹并尝试在浏览器中请求.svc
文件。
起初它对我不起作用,因为它无法识别.svc
扩展名。然后,我所要做的就是输入以下cmd:aspnet_regiis.exe -i
,现在一切正常。
现在一切似乎都运转正常。猜测当Visual Studio托管服务时,您无法请求.svc
文件。但它在IIS中托管时有效。