2017-02-15 6 views
0

Je voudrais créer un service WCF qui peut mettre l'image en flux.service WCF streaming images

J'ai prochaine config:

<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> 

Et le code:

[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); 
    } 
} 

Mais quand je suis en train ce via un navigateur comme

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

J'ai

400 Bad Request

Et quand

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

405 Méthode non autorisée

Qu'est-ce qui ne va pas?

+0

Si WebOperationContext.Current était nul, vous obtiendriez certainement des réponses bizarres. – BugFinder

+0

mais je ne suis même pas entré en fonction. Point de rupture non atteint. – Ksice

Répondre

0

Votre service est-il SOAP ou REST? Il semble que vous utilisiez la syntaxe REST (WebGetAttribute) mais votre liaison est BasicHttpBinding (SOAP). Essayez à la place d'utiliser WebHttpBinding à la place et voyez comment ça se passe!