2016-08-17 22 views
0

私はJSON/RESTサービスを呼び出すためにBizTalk 2010 SendPortにプラグインするWCF CustomBehaviorに取り組んでいます。 SendPortはバインディングタイプ= webHttpBindingのWCF/Customです。エラー "要求に応じてnullまたは空白のメソッドを設定できません。" WCF CustomBehaviorで

リクエストに4つのヘッダーを追加する必要があります。

私はBeforeSendRequest方法でこのコード含める場合:

var newHttpRequestMessageProperty = new HttpRequestMessageProperty 
{ 
    Method = request.Headers.Action, 
    QueryString = string.Empty, 
    SuppressEntityBody = false, 

}; 

newHttpRequestMessageProperty.Headers.Add("X-ST-PartnerID", partnerIDFromSSO); 
newHttpRequestMessageProperty.Headers.Add("X-ST-Token", tokenIDFromSSO); 
newHttpRequestMessageProperty.Headers.Add("X-ST-AuthType", "TOKEN"); 
newHttpRequestMessageProperty.Headers.Add("Accept-Language", "EN"); 

request.Properties[HttpRequestMessageProperty.Name] = newHttpRequestMessageProperty; 

をそれは私に、このエラーを与える:

System.ArgumentException: Cannot set null or blank methods on request. 
Parameter name: value 

Server stack trace: 
    at System.Net.HttpWebRequest.set_Method(String value) 
    at System.ServiceModel.Channels.HttpOutput.WebRequestHttpOutput.PrepareHttpSend(Message message) 
    at System.ServiceModel.Channels.HttpOutput.BeginSendCore(HttpResponseMessage httpResponseMessage, TimeSpan timeout, AsyncCallback callback, Object state) 
    at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelAsyncRequest.SendWebRequest() 
    at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelAsyncRequest.OnGetWebRequestCompleted(IAsyncResult result) 
    at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelAsyncRequest.BeginSendRequest(Message message, TimeSpan timeout) 
    at System.ServiceModel.Channels.RequestChannel.BeginRequest(Message message, TimeSpan timeout, AsyncCallback callback, Object state) 
    at System.ServiceModel.Dispatcher 

私はそのコードを去るとき、私は戻ってパートナーのウェブから415を取得しますサービスなので、少なくとも私はそこに行っていることを知っています。私がやっている何

はこの記事のようになります、

理由だった...

 //Method = request.Headers.Action, 
    Method = "POST", 

、それが働いた:How to add a custom HTTP header to every WCF call?

答えて

1

同僚から、私は変更しました無効な "OperationName"があると、request.Headers.ActionにBizTalk sendportのCustomAction文字列全体が含まれていることが分かります。

<BtsActionMapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Operation Name="DELETE" Action="DELETE" /> 
    <Operation Name="GET" Action="GET" /> 
    <Operation Name="POST" Action="POST" /> 
</BtsActionMapping> 

は、私がここにサンプルの後に私のコードをモデル化しています:上記の修正後 https://biztalkrest.codeplex.com/discussions/657185

、それは十分なオーケストレーションの論理ポートに「操作名」を一致させるために私に夜が明けた、と確かに、私は「POST」を持っていました「POST」の代わりに使用します。 Ughhh ... OperationNameがCustomAction操作と一致しないように見えるので、BizTalkはCustomAction XMLブロック全体を送信します...驚くべきこと...

以下の図は、投稿します"。

enter image description here

関連する問題