ここで何か間違ったことをしているのかもしれないと思いますが、1日か2日粘り強く検索してきましたが、これを理解することはできません.
ソリューション内に再利用可能な WCF プロジェクトがあり、それに加えてソリューション固有の MVC.NET プロジェクトがあります。
解決: -
MVC.NET プロジェクト
クラス ライブラリ
- WCF プロジェクト
WCF テスト クライアントは、期待どおりの結果を取得します。ただし、MVC プロジェクトでセットアップされたエンポイントを介して WCF サービスを呼び出そうとすると、いくつかの問題が発生します。ユーザーからパラメーターが渡されない場合、正常に動作します。ただし、パラメーターを Web サービスに渡そうとすると、.svc ファイル内で使用できるものはないようです。
私のエンドポイントコード:
public override void RegisterArea( AreaRegistrationContext context ) {
context.Routes.Add( new ServiceRoute( "Api/SOAP/Log", new ServiceHostFactory(), typeof( Log ) ) );
context.Routes.Add( new ServiceRoute( "Api/SOAP/Report", new ServiceHostFactory(), typeof( Report ) ) );
context.Routes.Add( new ServiceRoute( "Api/Rest/Log", new WebServiceHostFactory(), typeof( Log ) ) );
context.Routes.Add( new ServiceRoute( "Api/Rest/Report", new WebServiceHostFactory(), typeof( Report ) ) );
}
サービス契約:
[ServiceContract]
public interface ILog {
[OperationContract]
[WebInvoke( Method = "POST", UriTemplate = "Search?systemName={systemName}&searchType={searchType}&query={query}&resultCount={resultCount}&ipAddress={ipAddress}")]
SearchResult Search( string systemName, string searchType, string query, string resultCount, string ipAddress );
}
および svc サービス:
パブリック クラス ログ : ILog {
public void Search( string systemName, string searchType, string query, string resultCount, string ipAddress ) {
LogSearch Manager = new LogSearch();
Manager.ProcessWcfRequest( systemName, searchType, query, resultCount, ipAddress);
}
}
これらのパラメーターは明らかに通過していません。また、実行時にSystem.Web.HttpContext.CurrentおよびWebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParametersを検査しようとしましたが、これらにはパラメーターも含まれていません。
次の AJAX リクエストを使用してリクエストを作成しています。
jQuery.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "/Api/Rest/Log/Search",
dataType: "json",
data: { systemName : "test", searchType : "test", query : "test", resultCount : "test", ipAddress : "test" },
success: function (msg) {
console.log(msg);
}
});
つまり、パラメーターを必要としないサービス メソッドは問題ありませんが、パラメーターを必要とするサービス メソッドには何も渡されません。
誰かが私が間違っているところを見ることができますか?