1

以下のように AfterReceiveRequest() メソッドを使用しています

public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel, System.ServiceModel.InstanceContext instanceContext)
{

}

以下に示すように、メッセージヘッダー全体を取得しています( request.ToString() ):

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">

<s:Header>

<MyHeader xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <AppIp xmlns="http://schemas.datacontract.org/2004/07/WcfTest">192.168.1.0</AppIp>
  <AppPwd xmlns="http://schemas.datacontract.org/2004/07/WcfTest">UITPass</AppPwd>
  <Appid xmlns="http://schemas.datacontract.org/2004/07/WcfTest">UIT</Appid>
  <ShibbolethSessionID i:nil="true" xmlns="http://schemas.datacontract.org/2004/07/WcfTest" />
  <UCLALogonID i:nil="true" xmlns="http://schemas.datacontract.org/2004/07/WcfTest" />
  <UserUID i:nil="true" xmlns="http://schemas.datacontract.org/2004/07/WcfTest" />
</MyHeader>

<To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://localhost:60729/Service/StudyListService.svc</To>
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/IStudyListService/GetStudyListData</Action>

</s:Header>

</s:Envelope>

私は読みたいrequest.Headers を使用するノード。マイヘッダー

デフォルトでは、request.Headers は以下に示すようにToおよびActionノードのプロパティを提供します。

request.Headers.To
request.Headers.Action

同様に、 request.Headers.MyHeaderを取得する方法はありますか?

どんなアイデアでも大歓迎です。

4

2 に答える 2

1
public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
{
    var header = request.Headers.GetHeader<MyHeader>("MyHeader", "replace this with you custom namespace uri");

    var userId = header.UserUID;

    // ...
    // ...
    // ...

    return null; 
}
于 2013-10-31T20:16:22.867 に答える
0

XML全体を解析して解決しました:

var requestXML = request.ToString();
var headerData = System.Text.Encoding.UTF8.GetBytes(requestXML);
  using (MemoryStream memoryStream = new MemoryStream(headerData))
  {
         using (XmlReader xmlReader = new XmlTextReader(memoryStream))
         {
              xmlReader.MoveToContent();
              while (xmlReader.Read())
              {
                  if (xmlReader.NodeType == XmlNodeType.Element)
                  { 
                      //read whatever element is desired      
                  }
               }
          }
    }
于 2013-11-13T23:15:01.523 に答える