7

我刚开始拦截对我的 WCF 服务的请求。

我正在使用如下所示的 java 代码调用 Web 服务(短版)

connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Username", "Testname");

我正在接收请求,但无法获取/查找消息请求中的标头。我试过这样的事情:

public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel, System.ServiceModel.InstanceContext instanceContext)
{
    int headerIndex = request.Headers.FindHeader("Username", string.Empty);
    var username = request.Headers["Username"]

    return null;
}

但我总是以 -1 或异常结束。这样做的正确方法是什么?我在Java方面也做错了吗?

4

1 回答 1

16

类中的Headers属性Message将为您提供SOAP标头;您正在寻找的是HTTP标头。要获得这些,您应该使用HttpRequestMessageProperty

    public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
    {
        var prop = (HttpRequestMessageProperty)request.Properties[HttpRequestMessageProperty.Name];
        var userName = prop.Headers["Username"];

        return null;
    }
于 2013-09-23T23:12:36.077 回答