0

Car.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);
    }

CarService.svc.cs

public class CarService : ICarService
    {

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

web.config

<?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 プラットフォームを使用し、.NET BCL の使用に縛られずに API システムのフォームを作成している場合にも意味がありますが、すべてのクライアントのほとんどがネイティブを理解するわけではありません。種類

于 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 に答える