Web サービス経由で Microsoft CRM 2011 に接続する Windows 7 Phone 用のアプリを作成しています。
以前にコンソール アプリを作成し、問題なくデータを送信することができました。ただし、電話で機能させるのははるかに困難です。トラブルシューティングを重ねた結果、問題は電話を使用しているバインディングにあることがわかりました。Windows Phone では利用できないSymmetricSecurityBindingElementが必要なようです。この要素または回避策を必要としない方法はありますか?
編集
正常に動作するコンソール アプリのバインドを次に示します。
BindingElementCollection bindingElements = new BindingElementCollection();
SymmetricSecurityBindingElement security = new SymmetricSecurityBindingElement();
security.IncludeTimestamp = true;
security.ProtectionTokenParameters = new SspiSecurityTokenParameters();
bindingElements.Add(security);
bindingElements.Add(new TextMessageEncodingBindingElement(MessageVersion.Soap12WSAddressing10, System.Text.Encoding.UTF8));
HttpTransportBindingElement transport = new HttpTransportBindingElement();
transport.MaxBufferSize = Int32.MaxValue;
transport.MaxReceivedMessageSize = Int32.MaxValue;
bindingElements.Add(transport);
CustomBinding binding = new System.ServiceModel.Channels.CustomBinding(bindingElements);
binding.Name = "CustomBinding_IDiscoveryService";
return binding;
これが私のWindows Phoneのバインディングです。MessageSecurityExceptionをスローします。
BindingElementCollection phoneBindingElements = new BindingElementCollection();
TransportSecurityBindingElement security = new TransportSecurityBindingElement();
security.IncludeTimestamp = true;
phoneBindingElements.Add(security);
phoneBindingElements.Add(new TextMessageEncodingBindingElement(MessageVersion.Soap12WSAddressing10, System.Text.Encoding.UTF8));
HttpTransportBindingElement transport = new HttpTransportBindingElement();
transport.MaxBufferSize = Int32.MaxValue;
transport.MaxReceivedMessageSize = Int32.MaxValue;
phoneBindingElements.Add(transport);
CustomBinding binding = new System.ServiceModel.Channels.CustomBinding(phoneBindingElements);
binding.Name = "CustomBinding_IDiscoveryService";