1

いくつかのドキュメント変換を実行し、ドキュメントを呼び出し元に返すWCFサービスがあります。ローカル開発サーバーでローカルに開発する場合、サービスはASP.NET開発サーバーでホストされ、コンソールアプリケーションが操作を呼び出し、数秒以内に実行されます。

.svcファイルを介してIISでサービスをホストすると、2つのドキュメントが正しく機能し、3つ目が爆破され、OpenXml Sdkを使用してドキュメントという単語の作成が開始されますが、その後は終了します。これはIISと関係があると思いますが、指を置くことができません。

私が生成するドキュメントは全部で3種類あります。一言で言えば、これはそれがどのように機能するかです

SQL 2005 DB / IBMDB2->データを公開するために他の開発者によって作成されたWCFサービス。このサービスには、basicHttpBindingを使用するエンドポイントが1つだけあります

My Serviceは、サービスを呼び出し、関連データを取得し、Open XmlSdkを使用してMicrosoftWordドキュメントを生成し、サーバーに保存して、ユーザーにパスを返します。

ワードドキュメントは100KB以下です。

同じ結果でwsHttpBindingを試しましたが、basicHttpBindingも使用しています。

驚くべきことは、ローカルでの速度がどれほど速いかということです。さらに、2つのドキュメントが問題なく生成され、3番目のドキュメントタイプは機能しません。

エラーメッセージへ:

http://myservername.mydomain.inc/MyService/Service.SvcへのHTTP応答の受信中にエラーが発生しました。これは、HTTPプロトコルを使用していないサービスエンドポイントバインディングが原因である可能性があります。これは、サーバーによってHTTP要求コンテキストが中止されたことが原因である可能性もあります(サーバーがシャットダウンしたことが原因である可能性があります)。詳細については、サーバーログを参照してください。

私は過去2日間、何が起こっているのかを理解しようと費やしました。maxReceivedMessageSize、maxBufferSize、maxBufferPoolSizeなどを大きな値に変更するなど、すべてを試しました。

 <httpRuntime maxRequestLength="2097151" executionTimeout="120"/>

そのためにIISが窒息していたかどうかを確認します。

プログラム的には、このサービスは特別なことは何もしません。OpenXml Sdkを使用してデータから単語ドキュメントを作成するだけです。前述のように、ローカルでasp.net開発サーバーで実行されているコンソールアプリ(http :)を介して呼び出されると、3つのドキュメントすべてがローカルで機能します。 //localhost:3332/myService.svc

IISでホストし、Windowsフォームアプリケーションで呼び出そうとすると、エラーが発生します。

ログを要求されることはわかっているので、はい、ホストでログを有効にしています。

そして、ログにエラーはありません、私はすべてをログに記録しています。

基本的に、私は別の開発者によって書かれた2つのサービス操作を呼び出します。

MyOperation呼び出し->HisOperation1、次にHisOperation2、これらの呼び出しは両方とも私に複雑なタイプを与えます。彼はLINQ2SQLを使用していて、そこで面白いビジネスが行われている可能性があるため、明日彼のコードを見ていきます。彼はさまざまなコレクションなどを使用していますが、まったく同じドキュメントを実行できるという事実から、サービスがASP WebDevサーバーでローカルにホストされている場合、数秒以内に「ドキュメント3」と呼ぶことができます。縮小されたカッシーニで実行し、IISで爆破しますか?

ログから、HisOperation1とHisOperation2を呼び出した後、サービスがララランドダイに入ると、Windowsイベントログにアプリケーションプール(w3wp.exe)エラーが記録されているようです。

Faulting application w3wp.exe, version 6.0.3790.1830, stamp 42435be1, faulting module kernel32.dll, version 5.2.3790.3311, stamp 49c5225e, debug? 0, fault address 0x00015dfa.

.NET2.0ランタイムエラーとして分類されます。

どんな助けでもありがたいです、睡眠不足は私に近づいています。

オビ=ワン・ケノービを助けてください、あなたは私の唯一の希望です。

4

4 に答える 4

1

このメッセージが表示されました:

http://myservername.mydomain.inc/MyService/Service.SvcへのHTTP応答の受信中にエラーが発生しました。これは、HTTPプロトコルを使用していないサービスエンドポイントバインディングが原因である可能性があります。これは、サーバーによってHTTP要求コンテキストが中止されたことが原因である可能性もあります(サーバーがシャットダウンしたことが原因である可能性があります)。詳細については、サーバーログを参照してください。

そして問題は、私が転送しようとしていたオブジェクトが[Serializable]ではなかったことです。転送しようとしたオブジェクトはDataTableでした。

転送しようとした単語文書もシリアル化できないので、問題になる可能性があります。

于 2011-09-05T15:11:28.567 に答える
0

はい、ログ、または少なくとも何をログに記録しているかについてのアイデアが必要です。WCFレベルでメッセージとトランスポートの両方のログオンがあると仮定します。

注目すべきことの1つは、権限です。Cassiniで実行すると、Webサーバーは現在ログインしているユーザーとして実行されます。これにより、SQLまたはCASのアクセス許可の問題が隠されます(正直なところ、アカウントは通常、ローカル管理者です)。IISに公開するとすぐに、アプリケーションプールユーザーの下で実行されます。これは、デフォルトでは、はるかに制限されています。

IISデバッグダンプをオンにして、KB919789の手順に従ってください。

于 2009-07-17T05:37:47.503 に答える
0

参考までに、 IIS 6 を IIS 5.0 分離モードで動作するように変更したところ、すべてが動作しました。奇数。

于 2009-07-17T17:10:52.157 に答える
0

IEnumerable<T>WCF サービスで DataMemberを使用すると、同じエラーが発生しました。場合によっては を として返すことがIQueryable<T>わかったので、LINQ ステートメントIEnumerable<T>に追加するだけで済みました。.ToList<T>()

同じ間違いを繰り返さないようIEnumerable<T>にtoを変更しました。IList<T>

于 2015-03-11T09:46:01.887 に答える