Azure 如何将WebHttpRelayBinding与应用程序/json请求一起使用?

Azure 如何将WebHttpRelayBinding与应用程序/json请求一起使用?,azure,servicebus,webhttprelaybinding,Azure,Servicebus,Webhttprelaybinding,当我尝试使用通用消息处理程序时,如果我使用自己的类型(如text/x-json),则当accept或content类型为html/xml/json时,我会遇到错误消息会发送到我的处理程序,流会将数据返回到webclient。我已经使用调试器完成了这一过程,我的代码成功地创建了消息,但servicebus绑定中的某些内容阻塞并导致服务器不响应。我是否需要更改一个设置,以允许application/json并使服务总线发送原始数据,而不是尝试重新序列化它 [WebGet( UriTemplate =

当我尝试使用通用消息处理程序时,如果我使用自己的类型(如text/x-json),则当accept或content类型为html/xml/json时,我会遇到错误消息会发送到我的处理程序,流会将数据返回到webclient。我已经使用调试器完成了这一过程,我的代码成功地创建了消息,但servicebus绑定中的某些内容阻塞并导致服务器不响应。我是否需要更改一个设置,以允许application/json并使服务总线发送原始数据,而不是尝试重新序列化它

[WebGet( UriTemplate = "*" )]
[OperationContract( AsyncPattern = true )]
public IAsyncResult BeginGet( AsyncCallback callback, object state )
{
    var context = WebOperationContext.Current;
    return DispatchToHttpServer( context.IncomingRequest, null, context.OutgoingResponse, _config.BufferRequestContent, callback, state );
}

public Message EndGet( IAsyncResult ar )
{
    var t = ar as Task<Stream>;
    var stream = t.Result;
    return StreamMessageHelper.CreateMessage( MessageVersion.None, "GETRESPONSE", stream ?? new MemoryStream() );
}
[WebGet(UriTemplate=“*”)]
[操作契约(AsyncPattern=true)]
公共IAsyncResult开始集(异步回调,对象状态)
{
var context=WebOperationContext.Current;
返回DispatchToHttpServer(context.IncomingRequest,null,context.OutgoingResponse,_config.BufferRequestContent,回调,状态);
}
公共消息EndGet(IAsyncResult ar)
{
var t=ar作为任务;
var stream=t.结果;
返回StreamMessageHelper.CreateMessage(MessageVersion.None,“GETRESPONSE”,stream??newmemoryStream());
}

更改后,您可以使用以下选项,而不是使用:StreamMessageHelper.CreateMessage:

WebOperationContext.Current.OutgoingResponse.ContentTYpe = "application/json"


public Message CreateJsonMessage(MessageVersion version, string action, Stream jsonStream)
{
    var bodyWriter = new JsonStreamBodyWriter(jsonStream);
    var message = Message.CreateMessage(version, action, bodyWriter);
    message.Properties.Add(WebBodyFormatMessageProperty.Name, new WebBodyFormatMessageProperty(WebContentFormat.Json));
    return message;
}

class JsonStreamBodyWriter : BodyWriter
{
    Stream jsonStream;
    public JsonStreamBodyWriter(Stream jsonStream)
        : base(false)
    {
        this.jsonStream = jsonStream;
    }

    protected override void OnWriteBodyContents(XmlDictionaryWriter writer)
    {
        writer.WriteNode(JsonReaderWriterFactory.CreateJsonReader(this.jsonStream, XmlDictionaryReaderQuotas.Max), false);
        writer.Flush();
    }
}

您是否尝试过
[WebGet(UriTemplate=“*”,ResponseFormat=WebMessageFormat.Json)]
?我没有,bug不是每个路由都返回Json。