当我们创建一个WCF服务时,会自动在项目中生成一个.svc文件,这个文件是我们用来定义服务的元数据信息以及服务终结点的文件。在本次攻略中,我们将详细讲解svc文件的作用,以及如何正确配置svc文件来使服务正常运行。
什么是svc文件
.svc文件是WCF服务中的元数据信息文件,它用于定义服务的元数据信息和终结点信息。服务的元数据信息主要包括服务契约(Service Contract)、操作(Operation)、绑定(Binding)、端点(Endpoint)等。它们描述了服务的接口和实现,以及如何进行通信。
svc文件的作用
一个WCF服务必须要有一个.svc文件才能被IIS或其他Web服务器所托管。这个文件的作用主要是定义服务的元数据信息和终结点信息。浏览器或客户端请求服务时,就是通过这个文件来确定服务的位置和访问方式的。
服务端的配置文件可以动态地改变服务的实现,而客户端只需要知道服务的契约、地址和绑定信息,就可以调用服务。因此,svc文件中的元数据信息可以帮助客户端创建代理,实现与服务端的通信。
svc文件的格式
一个基本的.svc文件通常具有以下格式:
<%@ ServiceHost
Language="C#"
Debug="true"
Service="WcfServiceLibrary1.Service1"
CodeBehind="Service1.svc.cs" %>
其中,Service属性指定了服务类的完全限定名,CodeBehind指定了服务类的代码文件。
除此之外,svc文件还可以定义服务的终结点信息,示例如下:
<%@ ServiceHost
Language="C#"
Debug="true"
Service="WcfServiceLibrary1.Service1"
CodeBehind="Service1.svc.cs" %>
<%@ Assembly Name="WcfServiceLibrary1" %>
<%@ WebHandler Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory"
Service="WcfServiceLibrary1.Service1" %>
这个文件定义了一个使用ASP.NET AJAX绑定的终结点,Factory属性指定了使用的服务主机工厂。
如何正确配置svc文件
使用svc文件创建WCF服务并不能保证服务的正确性,我们还需要正确地配置svc文件。下面是一个正确配置的svc文件示例:
<%@ ServiceHost Language="C#"
Debug="true"
Service="WcfServiceLibrary1.Service1" %>
这个文件只定义了服务契约和服务实现,其他元数据信息和终结点信息都通过配置文件进行配置。
在配置文件中,我们可以为服务定义多个终结点,每个终结点可以使用不同的绑定和地址。以下是一个配置文件的示例:
<system.serviceModel>
<services>
<service name="WcfServiceLibrary1.Service1">
<endpoint address="http://localhost:8080/TestService"
binding="basicHttpBinding"
contract="WcfServiceLibrary1.IService1" />
<endpoint address="http://localhost:8080/TestService2"
binding="wsHttpBinding"
contract="WcfServiceLibrary1.IService1" />
<endpoint address="http://localhost:8080/TestService3"
binding="netTcpBinding"
contract="WcfServiceLibrary1.IService1" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/TestServiceHost" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
这个配置文件定义了三个终结点,分别使用了基本HTTP绑定、WSHTTP绑定和TCP绑定。每个终结点都在不同的地址上进行通信。
示例1:使用svc文件创建基本的WCF服务
创建一个基本的WCF服务很简单。首先,我们需要在Visual Studio中创建一个WCF服务项目。然后,我们需要在项目中添加一个WCF服务,这将自动在项目中生成一个.svc文件。
我们将服务的实现代码写在Service1.cs文件中。示例代码如下:
using System.ServiceModel;
namespace WcfServiceLibrary1
{
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetData(int value);
}
public class Service1 : IService1
{
public string GetData(int value)
{
return string.Format("You entered: {0}", value);
}
}
}
然后,我们需要在.svc文件中指定服务的实现。示例代码如下:
<%@ ServiceHost Language="C#" Debug="true" Service="WcfServiceLibrary1.Service1" %>
最后,我们需要配置服务的终结点信息。我们可以在Web.config文件中添加以下代码:
<system.serviceModel>
<services>
<service name="WcfServiceLibrary1.Service1">
<endpoint address="" binding="basicHttpBinding"
contract="WcfServiceLibrary1.IService1" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
我们可以在浏览器中访问WCF服务,比如,在地址栏中输入:http://localhost:8080/Service1.svc/GetData?value=1,即可调用服务,返回结果如下:
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">
You entered: 1
</string>
示例2:使用svc文件配置RESTful WCF服务
WCF服务也可以使用RESTful风格来传输数据。我们可以定义一个WebHttp绑定来配置RESTful服务的终结点。示例代码如下:
<%@ ServiceHost Language="C#" Debug="true" Service="WcfServiceLibrary1.RestfulService" %>
我们可以在Web.config文件中定义RESTful服务的终结点和绑定,示例代码如下:
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="WebHttpBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service name="WcfServiceLibrary1.RestfulService">
<endpoint address=""
behaviorConfiguration="WebHttpBehavior"
binding="webHttpBinding"
contract="WcfServiceLibrary1.IRestfulService" />
</service>
</services>
</system.serviceModel>
在实现代码中,我们需要按照RESTful风格定义服务的操作,示例代码如下:
public class RestfulService : IRestfulService
{
public string Get(int id)
{
return string.Format("You entered: {0}", id);
}
public void Post(string data)
{
// Do something with data
}
public void Put(int id, string data)
{
// Do something with id and data
}
public void Delete(int id)
{
// Do something with id
}
}
我们可以使用HTTP GET和POST方法来访问服务,返回结果如下:
For HTTP GET, we can use: http://localhost:8080/RestfulService.svc/Get?id=1
Result: You entered: 1
For HTTP POST, we can use: http://localhost:8080/RestfulService.svc/Post
And the POST data is: data
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解WCF服务中的svc文件 - Python技术站