2008-12-04 60 views
1

我有打开苔藓网站单向Web方法问题(可能是因为在单向WEBMETHOD上下文为null)web服务单向和新SPSite的(myUrl)

有可能改写这个代码删除空引用异常? (不单向属性我没有例外)

[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) 

回答

1

我已经找到一个解决办法来解决我的problem.Create新的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; 
     } 
0

,我看到的唯一含义是,你实际上是使用一个新的HttpContext。

Well..duh :)

无论如何,这将有含义,如果你也有输入和outputfilters成立。例如,如果您正在使用带有您自己的输入和输出过滤器的WebServiceExtensions(WSE)。在这种情况下,您应该将数据存储在HttpContext(即输入和输出过滤器中的数据)中并使用该数据。只是为了让您只使用一个httpContext,而不是创建第二个httpContext,并且在扩展软件时防止将来出现任何错误。

0

使用此会为你工作:

SPWeb web = SPContext.Current.Web