2017-02-15 11 views
0

Я хотел бы сделать службу WCF, которая может помещать изображение в поток.WCF службы потокового изображения

У меня есть следующий в конфигурации:

<service name="Images" behaviorConfiguration="ImagesBehavior"> 
    <endpoint address="http://localhost:5523/Images.svc" 
     binding="basicHttpBinding" contract="Images" /> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
    <host> 
     <baseAddresses> 
     <add baseAddress="http://localhost:5523/Images" /> 
     </baseAddresses> 
    </host> 
</service> 

<behavior name="ImagesBehavior"> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
     <serviceMetadata httpGetEnabled="true" /> 
</behavior> 

и код:

[OperationContract] 
[WebGet(UriTemplate = "GetImage/{imageID}", 
    BodyStyle = WebMessageBodyStyle.Bare)] 
public Stream GetImage(string imageID) 
{ 
    try 
    { 

     if (WebOperationContext.Current != null) 
      WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg"; 

     var ms = new MemoryStream(myImage); 
     return ms; 
    } 
    catch (Exception e) 
    { 
if (WebOperationContext.Current != null) 
      WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml"; 
     Console.WriteLine("GetImage ERROR:" + e.Message + "\r\n" + e.StackTrace); 
     byte[] errorBytes = Encoding.UTF8.GetBytes("ERROR"); 
     return new MemoryStream(errorBytes); 
    } 
} 

Но когда я пытаюсь это через браузер, как

http://localhost:5523/Images.svc/GetImage/imagecodeblabla 

У меня

400 Bad Request

И когда метод

http://localhost:5523/Images/GetImage/imagecodeblabla

405 Not Allowed

Что случилось?

+0

Если WebOperationContext.Current был null, вы определенно получите нечетные ответы. – BugFinder

+0

, но я даже не входил в функцию. Точка останова не достигнута. – Ksice

ответ

0

Является ли ваша служба SOAP или REST? Похоже, что вы используете синтаксис REST (WebGetAttribute), но ваша привязка - это BasicHttpBinding (SOAP).

Попробуйте использовать вместо этого WebHttpBinding и посмотрите, как это происходит!