0

汽车.cs

[DataContract]
    public class Car
    {
         [DataMember]
         public string Id { get; set; }
         [DataMember]
         public Bitmap Image { get; set; }
    }

ICarService.cs

[ServiceContract]
    public interface ICarService
    {

        [OperationContract]
        [WebGet(UriTemplate = "Car/{id}")]

        Car GetCarId(string id);
    }

汽车服务.svc.cs

public class CarService : ICarService
    {

        public Car GetCarId(string id)
        {
            var newCar = new Car
            {
                Id = id,
                Image = new Bitmap("../../Atish.jpg")
            };
            return newCar;
        }
    }

网络配置

<?xml version="1.0"?>
<configuration>

  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5"/>
  </system.web>
  <system.serviceModel>
    <services>
      <service name="CarHaat.CarService">
        <endpoint address="" behaviorConfiguration="restfulBehavior"
          binding="webHttpBinding" bindingConfiguration="" contract="CarHaat.ICarService" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost/bookservice" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
        <behavior name="restfulBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <protocolMapping>
        <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>    
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <!--
        To browse web app root directory during debugging, set the value below to true.
        Set to false before deployment to avoid disclosing web app folder information.
      -->
    <directoryBrowse enabled="true"/>
  </system.webServer>

</configuration>

问题是....当我在浏览器中点击这个 url localhost:4765/CarService.svc/car/1 时,我得到以下异常。我该如何解决?我想以 json 格式返回图像。

在此处输入图像描述

4

2 回答 2

1

什么是调用堆栈跟踪?如果我是你,我会转到调试 > 异常菜单,然后勾选公共语言运行时异常项的“抛出”复选框。然后,这将带您到引发异常的确切位置。对我来说,我相信它可能会从 Bitmap 构造函数中抛出,因为你给它一个不正确的路径。例如,您需要使用 Server.MapPath 将路径映射到相关图像文件。当涉及到 Web 平台时,它需要有问题的文件的完全限定路径。

除此之外,在您处理位图对象之前,该文件将被锁定,因此您可能会遇到问题。最好的做法可能是将图像文件的 byte[] 返回给客户端,让客户端处理将其流式传输到页面(例如使用响应将字节写入页面)。如果您使用 WCF 平台并制作一种 API 系统的形式,这也是有意义的,在这种情况下,您不依赖于使用 .NET BCL,而是使其尽可能通用,以便并非所有客户端中的大多数都理解本机类型

于 2013-09-18T09:55:51.680 回答
0

返回以Base64(字符串)序列化的图像,然后在客户端对其进行反序列化

像这样

//Serialize
var bytes = File.ReadAllBytes(@"bbbd996028159395cce9b63d717bf0ef.jpeg");
var base64 = Convert.ToBase64String(bytes);

//Deserialize
var nbytes = Convert.FromBase64String(base64);
File.WriteAllBytes(@"yayaya.jpeg", nbytes);
于 2013-09-18T09:55:32.867 回答