我想使用第三方restful Web服务来公开GET请求的方法。 GET请求将在Windows服务+ Timer中执行,它们都返回JSON。
如果可能的话,我希望使用WCF库来反序列化JSON - > POCO同时实现前向兼容性。据我所知,后者是通过实现IExtensibleDataObject的DataContracts实现的。我可以使用此方法来使用第三方restful(JSON)Web服务吗?
任何反馈意见。感谢。
答案 0 :(得分:1)
听起来您正在尝试使用WCF客户端库来使用第三方服务。 WCF客户端库旨在使用定义的服务契约,可以是来自WSDL文档,也可以来自具有ServiceContract
类以及相关OperationContract
和DataContract
标记方法的组件。类。您可以使用客户端库来使用JSON,但您几乎必须将第三方服务“重新创建”为基于soap的服务,以便为服务合同生成WSDL或编写ServiceContract
程序集。
请查看此short CodeProject article以了解如何创建WCF JSON输出服务以及如何在WCF中配置WebHttpBinding。
至于使用带有JSON的IExtensibleDatObject
,这个other CodeProject article有一些很好的信息,但我不认为它适用于您的场景,因为您必须控制第三方服务合同。
答案 1 :(得分:0)
在IService1.cs页面中: -
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "Json/{id}")]
string myfun(string id);
在Service1.cs页面中: -
public string myfun(string id)
{
string ConnectString = "server=localhost;database=test_local;integrated security=SSPI";
string QueryString = "select * from tbl_af_register where id=" + id;
SqlConnection myConnection = new SqlConnection(ConnectString);
SqlDataAdapter da = new SqlDataAdapter(QueryString, myConnection);
DataSet ds = new DataSet();
da.Fill(ds, "TestName");
string i = ds.Tables[0].Rows[0]["name"].ToString();
return "your name is " + i;
}
在Web.Config文件中: -
In - > 'system.serviceModel'部分
<system.serviceModel>
<services>
<service name="WcfService2.Service1">
<!-- Service Endpoints -->
<!-- Unless fully qualified, address is relative to base address supplied above -->
<endpoint address ="" binding="webHttpBinding" contract="WcfService2.IService1" behaviorConfiguration="web">
<!--
Upon deployment, the following identity element should be removed or replaced to reflect the
identity under which the deployed service runs. If removed, WCF will infer an appropriate identity
automatically.
-->
</endpoint>
</service>
</services>
在web.config的'behavior'部分: -
<behaviors>
<endpointBehaviors>
<behavior name="web">
<webHttp/>
</behavior>
</endpointBehaviors>
注意: - 此名称“web”应与 - &gt;相同behaviorConfiguration =“web”