lớp được định nghĩa như sau:Làm thế nào Tự động thay đổi URL trong một hành vi WCF Tuỳ chỉnh
public class BizTalkRESTTransmitHandler : IClientMessageInspector
Tôi là một phương pháp có chữ ký này:
public object BeforeSendRequest(ref Message request, IClientChannel channel)
Vì vậy, tôi nghĩ rằng tôi cần phải thao tác kênh vật.
Lý do là điều này đang được sử dụng trong BizTalk 2010 SendPort để hỗ trợ JSON. Tôi cố gắng này cho đến nay:
if (channel.RemoteAddress.Uri.AbsoluteUri == "http://api-stage2.mypartner.com/rest/events/2/"
|| channel.RemoteAddress.Uri.AbsoluteUri == "http://api.mypartner.com/rest/events/2/")
{
//TODO - "boxout" will become a variable obtained by parsing the message
Uri newUri = new Uri(channel.RemoteAddress.Uri.AbsoluteUri + "boxout");
channel.RemoteAddress.Uri = newUri;
}
Trên cung cấp cho biên dịch báo lỗi: "System.ServiceModel.EndpointAddress.Uri" không thể được gán cho - nó đã sẵn sàng chỉ" RemoteAddress dường như chỉ đọc cũng
tôi đã tham khảo những câu hỏi này nhưng họ không sử dụng đối tượng kênh Assign a URL to Url.AbsoluteUri in ASP.NET, và WCF change endpoint address at runtime nhưng họ dường như không thể đối phó với đối tượng kênh
cập nhật 1:.. tôi thử như sau:
//try create new channel to change URL
WebHttpBinding myBinding = new WebHttpBinding();
EndpointAddress myEndpoint = new EndpointAddress(newURL);
ChannelFactory<IClientChannel> myChannelFactory = new ChannelFactory<IClientChannel>(myBinding, myEndpoint); //Change to you WCF interface
IClientChannel myNewChannel = myChannelFactory.CreateChannel();
channel = myNewChannel; //replace the channel parm passed to us
nhưng nó đã cho lỗi này: System.InvalidOperationException: Đã cố gắng để có được loại hợp đồng cho IClientChannel, nhưng kiểu đó không phải là một ServiceContract, cũng không thừa hưởng một ServiceContract.
Điều gì tạo nên một kênh hoàn toàn mới như ở đây? Có vẻ như quá mức cần thiết. http://stackoverflow.com/questions/27782919/wcf-change-address-at-runtime-exception/27783784#27783784 – NealWalters