SL 5 と WCF DS 5 を使用しています。基本的にテキスト ファイルの内容である文字列が入力として送信されるサービス POST 操作を呼び出しています。文字列が小さい場合は動作するようですが、約 1.4KB (テキスト ファイルのサイズ) の場合、このエラーがスローされます。
{System.InvalidOperationException: An error occurred while processing this request. ---> System.Exception: Error HRESULT E_FAIL has been returned from a call to a COM component.
System.Net.Browser.ClientHttpWebRequest.EndGetResponse (IAsyncResult asyncResult) で System.Data.Services.Http.ClientHttpWebRequest.EndGetResponse (IAsyncResult asyncResult) で System.Data.Services.Client.HttpWebRequestMessage.EndGetResponse (IAsyncResult asyncResult) で System.Data .Services.Client.HttpTransportLayer.EndGetResponse(IODataRequestMessage requestMessage, IAsyncResult asyncResult) で System.Data.Services.Client.DataServiceContext.GetResponseHelper(ODataRequestMessageWrapper request, IAsyncResult asyncResult, Boolean handleWebException) で System.Data.Services.Client.QueryResult.AsyncEndGetResponse( IAsyncResult asyncResult) --- 内部例外スタック トレースの終了 --- System.Data.Services.Client.BaseAsyncResult.EndExecute[T](オブジェクト ソース、文字列メソッド、IAsyncResult asyncResult) で System.Data.Services.Client.System.Data.Services.Client.DataServiceRequest.EndExecute[TElement](オブジェクト ソース、DataServiceContext コンテキスト、String メソッド、IAsyncResult asyncResult) の System.Data.Services の QueryResult.EndExecuteQuery[TElement](オブジェクト ソース、String メソッド、IAsyncResult asyncResult) .Client.DataServiceContext.EndExecute[TElement](IAsyncResult asyncResult)
WPF アプリから同じ操作を呼び出しましたが、正常に動作します。WCF DS ホストでもこれを行いました。
WebHttpBinding binding = new WebHttpBinding();
binding.MaxReceivedMessageSize = int.MaxValue;
binding.MaxBufferPoolSize = int.MaxValue;
binding.MaxBufferSize = int.MaxValue;
binding.ReaderQuotas.MaxStringContentLength = int.MaxValue;
SL クライアントからの呼び出しは次のとおりです。
CodeFirstContainer context;
context = new CodeFirstContainer(new Uri("http://localhost:4444/MyDataService/"));
OperationParameter p = new UriOperationParameter("fileIDN", fileIDN);
OperationParameter p1 = new UriOperationParameter("**fileContent**", responseContent);
context.BeginExecute<int>
(new Uri(context.BaseUri.OriginalString + "ProcessTextFile"),
(r) =>
{
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
try
{
context = r.AsyncState as CodeFirstContainer;
// Get the response of the query.
var response = context.EndExecute<int>(r).ToList();
}
catch (Exception ex)
{
}
}
);
},
context, "POST", true, new OperationParameter[] { p, p1 }
);