消费宁静的网络服务

时间:2012-08-28 11:42:09

标签: wcf

我想使用第三方restful Web服务来公开GET请求的方法。 GET请求将在Windows服务+ Timer中执行,它们都返回JSON。

如果可能的话,我希望使用WCF库来反序列化JSON - > POCO同时实现前向兼容性。据我所知,后者是通过实现IExtensibleDataObject的DataContracts实现的。我可以使用此方法来使用第三方restful(JSON)Web服务吗?

任何反馈意见。感谢。

2 个答案:

答案 0 :(得分:1)

听起来您正在尝试使用WCF客户端库来使用第三方服务。 WCF客户端库旨在使用定义的服务契约,可以是来自WSDL文档,也可以来自具有ServiceContract类以及相关OperationContractDataContract标记方法的组件。类。您可以使用客户端库来使用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”