在本文中,将探讨如何使用Windows Communication Foundation (WCF) 创建一个RESTful服务。WCF是一个框架,用于构建服务取向的应用程序。它允许开发者创建服务,这些服务可以通过网络进行通信。将通过一个简单的示例,展示如何定义WCF服务、接口、类,以及如何实现POST和GET方法。此外,还将介绍如何配置WCF服务,并进行简单的服务测试。最后,将实现客户端代码以使用WCF服务。
首先,需要在Visual Studio 2010中创建一个新的WCF服务应用程序。选择"新建项目",然后选择"WCF",再选择"WCF服务应用程序",并将其命名为"WCF Rest Based"。
接下来,需要添加一个新的服务类。在项目中添加一个名为"MyService.svc"的新服务类。然后,需要定义一个接口,例如"IMservice.cs",并添加以下代码:
[OperationContract(Name = "PostSampleMethod")]
[WebInvoke(Method = "POST", UriTemplate = "PostSampleMethod/New")]
string PostSampleMethod(Stream data);
[OperationContract(Name = "GetSampleMethod")]
[WebGet(UriTemplate = "GetSampleMethod/inputStr/{name}")]
string GetSampleMethod(string name);
这里,定义了两个方法:PostSampleMethod和GetSampleMethod。PostSampleMethod使用POST方法接受XML格式的输入,并返回状态字符串。GetSampleMethod使用GET方法接受字符串输入,并返回格式化的字符串。
在"MyService.cs"类中,需要为在IMyService接口中定义的方法提供实现。以下是PostSampleMethod和GetSampleMethod的实现示例:
public string PostSampleMethod(Stream data)
{
StreamReader reader = new StreamReader(data);
string xmlString = reader.ReadToEnd();
string returnValue = xmlString;
return returnValue;
}
public string GetSampleMethod(string strUserName)
{
StringBuilder strReturnValue = new StringBuilder();
strReturnValue.Append(string.Format("You have entered userName as {0}", strUserName));
return strReturnValue.ToString();
}
在PostSampleMethod中,将流数据转换为字符串读取器,然后读取数据作为字符串。在GetSampleMethod中,简单地返回一个格式化的字符串,其中包含传入的用户名。
为了使WCF服务能够通过webHttp访问,需要在"web.config"文件中定义配置。需要定义webHttpBinding和mexHttpBinding。以下是配置的示例:
<services>
<service name="WcfRestBased.MyService" behaviorConfiguration="myServiceBehavior">
<endpoint name="webHttpBinding" address="" binding="webHttpBinding" contract="WcfRestBased.IMyService" behaviorConfiguration="webHttp">
</endpoint>
<endpoint name="mexHttpBinding" address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
在这里,定义了服务名称、行为配置、端点名称、地址、绑定和契约。这些值需要与在服务类中定义的值相匹配。
为了确保WCF服务正常工作,可以在浏览器中打开"MyService.svc"。例如,如果服务位于"http://localhost/wcfrestbased/MyService.svc",可以通过调用"http://localhost/wcfrestbased/MyService.svc/GetSampleMethod/inputStr/suryaprakash"来测试GET方法服务。这应该会显示数据,如"