VS2012 の 4.0 フレームワークで WCF サービスを実行しています。サービスにメソッドを追加したところ、突然、別のプロジェクトでサービス参照が正しく更新されなくなりました。Reference.cs ファイルには、通常は多数の他のクラスが含まれているのではなく、1 つのクラスしか含まれていません。参照の更新プロセスは完了したと表示され、エラー メッセージは表示されません。
イベントログでこれを見つけましたが、一貫してそこにありませんでした:
WebHost failed to process a request.
Sender Information: System.ServiceModel.Activation.HostedHttpRequestAsyncResult/18956358
Exception: System.Web.HttpException (0x80004005): The service '/MyCompanyService/SystemService.svc/_vti_bin/ListData.svc' does not exist. ---> System.ServiceModel.EndpointNotFoundException: The service '/MyCompanyService/SystemService.svc/_vti_bin/ListData.svc' does not exist.
at System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath, EventTraceActivity eventTraceActivity)
at System.ServiceModel.ServiceHostingEnvironment.EnsureServiceAvailableFast(String relativeVirtualPath, EventTraceActivity eventTraceActivity)
at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.HandleRequest()
at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.BeginRequest()
at System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult result)
at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result)
Process Name: WebDev.WebServer40
Process ID: 13212
ListData は私のサービスの 1 つではないため、WCF に組み込まれているようなものです。
かなりの数のことを試した後、既存のサービス メソッドの 1 つを削除し、新しいメソッドを追加すると、問題なく機能することがわかりました。そのため、サービスで使用できるメソッドの数が制限に達したようです。サービスと devenv.config で maxNameTableCharCount を変更することを含むここに投稿された提案を試しましたが、まだ問題がありました。
私のコードのセットアップ方法では、部分クラスと部分インターフェイスを使用して多くのファイルに分割された 1 つの WCF サービスがあります。興味深いのは、問題を解決しない他の部分クラスからメソッドを削除した場合です。追加先と同じファイルまたは部分クラスからメソッドを削除する必要があります。
ありがたいことに、不要になった 2 つのメソッドを見つけましたが、すぐにこれに再び遭遇することになります。メソッドの数に制限はないと多くの人が言います。送信される XML のサイズの制限にすぎない可能性があります。しかし、それでは別の部分クラスのメソッドを削除できる理由が説明されず、何の効果もありません。
では、WCF でこれを回避するにはどうすればよいでしょうか。複数のサービスを使用したり、Web API に切り替えたりする他の方法はありますか?
サンプルコード:
public partial interface IMyCompanyService
{
[OperationContract]
SubmissionReturn SubmitApplication(MyCompanyAuthentication auth, MyApplication application);
...30 other methods defined just like this one...
}
public partial class MyCompanyService : IMyCompanyService
{
public SubmissionReturn SubmitApplication(MyCompanyAuthentication auth, ResellerApplication application)
{
authentication.Authenticate(auth);
MyApplicationBLL bll = new MyApplicationBLL();
return bll.SubmitApplication(application);
}
}
各サービス部分クラスには、次の数のメソッドがあります。 サービス ファイル A: 31 サービス ファイル B: 76 サービス ファイル C: 52 サービス ファイル D: 19