从WCF Web服务返回图像

时间:2013-09-01 01:29:58

标签: c# asp.net wcf web-services

我已经创建了我的第一个WCF Web服务,并且我试图根据一些传递的参数从它返回一个图像。我收到了错误:

  

响应消息的内容类型image / jpeg与绑定的内容类型(text / xml; charset = utf-8)不匹配。如果使用自定义编码器,请确保正确实施IsContentTypeSupported方法。

我需要做些什么才能解决此问题?

我的网站调用该服务的web.config文件具有以下配置:

<system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding name="BasicHttpBinding_IRestImageService" />
  </basicHttpBinding>
</bindings>
<client>
  <endpoint address="http://localhost:59473/RestImageService.svc"
    binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IRestImageService"
    contract="RestImageService.IRestImageService" name="BasicHttpBinding_IRestImageService" />
</client>

                                   

webservice web.config如下所示:

<system.serviceModel>
<behaviors>
  <serviceBehaviors>
    <behavior>
      <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<protocolMapping>
  <add binding="basicHttpsBinding" scheme="https"/>
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="false" multipleSiteBindingsEnabled="true"/>

服务合同:

[OperationContract]
    [WebInvoke(Method = "GET",
        ResponseFormat = WebMessageFormat.Json,
        UriTemplate = "Image/{type}/{typeid}/{imageid}/{size}/{extension}",
        RequestFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Wrapped)]
    Stream Image(string type, string typeid, string imageid, string size = "lrg", string extension = "jpg");

我在WCF非常新,所以任何帮助/指针都会非常感激!

更新 在实施Tim的建议后,我收到了一个新错误:

  

没有端点侦听localhost:59473 / RestImageService.svc可以接受该消息。这通常是由错误的地址或SOAP操作引起的。有关详细信息,请参阅InnerException(如果存在)。

我不确定如何配置Web服务来解决此问题。有什么建议吗?

这就是我访问网络服务的方式:

RestImageServiceClient client = new RestImageServiceClient();
    client.Image(WSC.Common.BO.User.User.ImageFolder.Buyer, "27085", "BuyerPhoto", "LRG", "jpg");

我希望能够将图片的src标记设置为Web服务网址。

1 个答案:

答案 0 :(得分:1)

basicHttpBinding是SOAP(版本1.1)。为了启用基于REST的服务,我相信(我自己没有做太多的事情)你需要使用webHttpBinding

我会尝试这样的事情。在服务的配置文件中,进行以下更改:

<protocolMapping>
  <add binding="webHttpBinding" scheme="http"/>
</protocolMapping>

应将<{1}}调用的默认绑定配置为webHttpBinding

http

以上代码应该<behaviors> <endpointBehaviors> <behavior> <webHttp /> </behavior> </endpointBehaviors> <serviceBehaviors> <behavior> <!-- To avoid disclosing metadata information, set the values below to false before deployment --> <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> <serviceDebug includeExceptionDetailInFaults="false"/> </behavior> </serviceBehaviors> </behaviors> 添加默认的终结点行为。

最后,在您的客户端配置文件中,进行以下更改:

webHttp

我不能肯定这会起作用,但我已经用WCF做了很多(在SOAP方面),所以我认为这至少会让你指向正确的方向。

修改

<client> <endpoint address="http://localhost:59473/RestImageService.svc" binding="webHttpBinding" contract="RestImageService.IRestImageService" name="WebHttpBinding_IRestImageService" /> </client> 是一个SOAP客户端。要使用REST服务,您需要使用HTTP API。以下是[带有JSON的WCF REST服务] http://www.codeproject.com/Articles/327420/WCF-REST-Service-with-JSON)的示例:

RestImageServiceClient

我建议使用Google搜索“WCF REST JSON客户端exmaple” - 您将获得大量点击和一些不同的方法来执行此操作。

作为补充说明,只要您在服务上公开了SOAP端点,就可以与您的SOAP客户端进行SOAP调用。