从Windows Form和jQuery调用Web服务

时间:2014-01-26 13:12:55

标签: c# jquery winforms wcf web-services

我有一个现有的Web WCF Web服务,可以通过代理由Windows表单调用。

我希望能够从jQuery调用此服务。

我正在关注以下文章:http://www.codemag.com/Article/1308041

但是,我被困了,因为文章说要将以下代码添加到服务的web.config中:

<services>
  <service
      behaviorConfiguration="ProductServiceBehavior"
      name="ProductServiceHost.ProductService">
    <endpoint
      address=""
      binding="basicHttpBinding"
      contract="ProductServiceHost.IProductService" />
  </service>
</services>

我的配置文件已经有了我的服务:

<service 
    behaviorConfiguration="MyApp.EndPoint.Services.TrainingServiceBehavior"    
    name="MyApp.EndPoint.Services.TrainingService">
  <endpoint 
    address="" binding="wsHttpBinding" 
    contract="MyApp.EndPoint.Services.Interface.ITrainingService" 
    name="wsHttp" 
    bindingConfiguration="wsHttpBindingConfiguration">
    <identity>
      <dns value="localhost" />
    </identity>
  </endpoint>
  <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>

我尝试用basicHttpBinding替换绑定,但是当我从Windows窗体调用服务时出现错误,例如“远程服务器返回错误:(415)不支持的媒体类型。”

我的服务是否应具有上述两种绑定?

基本上,我的更改在步骤中失败:您应该在此时运行现有应用程序以确保一切仍然有效。

有人能指出我正确的方向吗?

我在配置文件中添加了以下内容:

  <service
      behaviorConfiguration="MyApp.EndPoint.Services.TrainingServiceBehavior"
      name="MyApp.EndPoint.Services.TrainingService">
    <endpoint
      address=""
      binding="basicHttpBinding"
      contract="MyApp.EndPoint.Services.Interface.ITrainingService" />
  </service>

我还添加了以下装饰:

[WebInvoke(Method = "POST", 
BodyStyle = WebMessageBodyStyle.WrappedRequest, 
ResponseFormat = WebMessageFormat.Json, 
RequestFormat = WebMessageFormat.Json)]

但是,我的Windows窗体应用程序在调用服务时会出现以下错误:

服务器未提供有意义的回复;这可能是由于合同不匹配,过早的会话关闭或内部服务器错误造成的。

错误可能是因为我在配置文件中有两个具有相同名称的服务。如果我给新服务一个新名称,我是否必须创建一个新方法?

我正在尝试使用相同的方法,但这似乎是不可能的。

1 个答案:

答案 0 :(得分:1)

我认为您可以保留当前配置。本文所做的更改是基于非常基本的配置,以便明确配置现有服务(通过声明绑定,合同和行为)。您的配置已明确说明服务。

您应该做的是为jquery添加一个新配置,如文章中所述:添加新行为并添加新端点。