1

moss サイトを開く一方向 Web メソッドに問題があります (おそらく一方向 Web メソッドではコンテキストが null であるため)

このコードを書き直して null 参照例外を削除することはできますか? (oneway 属性がなければ、例外はありません)

[SoapDocumentMethod(OneWay = true)]
        [WebMethod(Description = "TestOneWay")]
        public voidTestOneWay(string webUrl)
        {
            using (SPSite site = new SPSite(webUrl))
            {
                 ....
            }
         }

例外は次のとおりです。

[2304] Error:Object reference not set to an instance of an object.
[2304] w3wp.exe Error: 0 :
[2304StackTrace:   at System.Web.Hosting.ISAPIWorkerRequestInProc.GetAdditionalServerVar(Int32 index)
[2304]    at System.Web.Hosting.ISAPIWorkerRequestInProc.GetServerVariable(String name)
[2304]    at System.Web.HttpRequest.AddServerVariableToCollection(String name)
[2304]    at System.Web.HttpRequest.FillInServerVariablesCollection()
[2304]    at System.Web.HttpServerVarsCollection.Populate()
[2304]    at System.Web.HttpServerVarsCollection.Get(String name)
[2304]    at System.Collections.Specialized.NameValueCollection.get_Item(String name)
[2304]    at Microsoft.SharePoint.SPGlobal.CreateSPRequestAndSetIdentity(Boolean bNotGlobalAdminCode, String strUrl, Boolean bNotAddToContext, Byte[] UserToken, String userName, Boolean bIgnoreTokenTimeout, Boolean bAsAnonymous)
[2304]    at Microsoft.SharePoint.SPRequestManager.GetContextRequest(SPRequestAuthenticationMode authenticationMode)
[2304]    at Microsoft.SharePoint.Administration.SPFarm.get_RequestNoAuth()
[2304]    at Microsoft.SharePoint.SPSite.CopyUserToken(SPUserToken userToken)
[2304]    at Microsoft.SharePoint.SPSite.SPSiteConstructor(SPFarm farm, Guid applicationId, Guid contentDatabaseId, Guid siteId, SPUrlZone zone, Uri requestUri, String serverRelativeUrl, Boolean hostHeaderIsSiteName, Uri redirectUri, Pairing pairing, SPUserToken userToken)
[2304]    at Microsoft.SharePoint.SPSite..ctor(SPFarm farm, Uri requestUri, Boolean contextSite, SPUserToken userToken)
[2304]    at Microsoft.SharePoint.SPSite..ctor(String requestUrl)
[2304]    at Reply.Moss2EAI.SPHandler.GetAllFlowConfiguration(String webUrl, String flowConList)
[2304]    at Reply.Moss2EAI.EaiMossIntegration.GetMessagesFromEai(String webUrl, String listName, String applicationName)
4

3 に答える 3

1

私の問題を解決するための回避策を見つけました。新しい HttpContext を作成します。問題は、それが正しい解決策なのか、それとも私が考慮していない影響があるのか​​ということです。

コンテキストを変更するために使用する方法は次のとおりです。

//Call this before call new SPSite()
 private static void ChangeContext(string webUrl)
        {
            Trace.TraceInformation("ChangeContext");
            HttpContext current = HttpContext.Current;
            HttpRequest request = new HttpRequest("", webUrl, "");
            HttpContext.Current = new HttpContext(request, new HttpResponse(new StringWriter(CultureInfo.CurrentCulture)));
            HttpContext.Current.User = current.User;
        }
于 2008-12-10T10:28:00.577 に答える
0

これを使用するとうまくいきます:

SPWeb web = SPContext.Current.Web
于 2009-10-27T11:22:43.310 に答える
0

私が見る唯一の意味は、実際に新しい HttpContext を使用しているということです。

まあ..当然:)

とにかく、これは、入力フィルターと出力フィルターも設定している場合に影響します。たとえば、独自の入力フィルタと出力フィルタで WebServiceExtensions (WSE) を使用している場合です。その場合、データを HttpContext (つまり、入力フィルターと出力フィルターにあります) に保存し、それを使用する必要があります。2 つ目の httpContext を作成する代わりに 1 つの httpContext のみを使用し、ソフトウェアを拡張するときに将来エラーが発生しないようにするためです。

于 2008-12-24T19:30:08.647 に答える