1

同じプロジェクトからasp.net Webサービスを呼び出そうとしています:

[MethodImpl(MethodImplOptions.Synchronized)]
public static void OnFileCreated(object source, FileSystemEventArgs e) {

    trackdata_analyse rWebAnalyse = new trackdata_analyse();
    rWebAnalyse.Analyse(@"pending\" + e.Name, "YOUNIVATE");

}

ただし、Webサービスから Server.MapPath を呼び出すと、常に次の「HttpContext is not available. This class can only be used in the context of an ASP.NET request. 」が表示されます。

[WebMethod]
public int Analyse(string fileName, string PARSING_MODULE){

    int nRecords;
    TrackSession rTrackSession = new TrackSession() ;
    string filePath = Server.MapPath(@"..\data\") + fileName;

Web サービスは同じプロジェクトにありますが、代わりに WebReference を追加する必要がありますか?

4

3 に答える 3

1

Web サービスの のみに依存するのHttpContextではなく (一般的には良い方法ではありません)、パラメーター化されたコンストラクターをWebServiceクラスに追加する必要があります。次に、デフォルトのパラメーターなしのコンストラクターでHttpContext、同じ依存関係を確認できます。

こうすることで、同じアセンブリから Web サービスを呼び出す必要がある場合に、HttpContext.

この場合、依存関係はServer.MapPathであり、URL の相対パスをハード ドライブ上の物理パスにマップします。代わりに特定のパスまたはベース パスを受け入れるように Web サービスを調整できます。指定されていない場合は、 を使用Server.MapPathして検索します。

IPathMapperまたは、物理パスをラップする 1 つの実装とラップするだけの別の実装を使用して、インターフェイスの抽象化を作成しServer.MapPath、同じアセンブリ内から 2 つ目の実装を使用することもできます。

Web サービス アセンブリ内から Web 参照を追加するよりも、これを強くお勧めします。後者は、サービス アプリの保守がより困難になることは言うまでもなく、パフォーマンスを大幅に低下させます。

于 2010-04-19T13:36:06.593 に答える
0

はい、HTTP コンテキストを使用する場合は、Web から呼び出しを行う必要があります (提案されている Web 参照を介して)。

于 2010-04-19T13:23:52.457 に答える
0

はい、そうです。要求は Web インターフェースを介してソリューションに出入りするためです。

于 2010-04-19T13:24:23.007 に答える