2010-07-03 46 views
0

我創建了一個c#控制檯項目來讀取sharepoint服務器上的excel文檔,一切正常。問題是,當我嘗試在Silverlight應用程序讀取Excel文件數據,一個異常彈出如下圖所示:System.ServiceModel.CommunicationException:通過excel服務讀取excel數據的Silverlight應用程序

{System.ServiceModel.CommunicationException: An error occurred while trying to make a request to URI 'http://phc/_vti_bin/excelservice.asmx'. This could be due to attempting to access a service in a cross-domain way without a proper cross-domain policy in place, or a policy that is unsuitable for SOAP services. You may need to contact the owner of the service to publish a cross-domain policy file and to ensure it allows SOAP-related HTTP headers to be sent. This error may also be caused by using internal types in the web service proxy without using the InternalsVisibleToAttribute attribute. Please see the inner exception for more details. ---> System.Security.SecurityException ---> System.Security.SecurityException: Security error. 
    at System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult) 
    at System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClass5.<EndGetResponse>b__4(Object sendState) 
    at System.Net.Browser.AsyncHelper.<>c__DisplayClass2.<BeginOnUI>b__0(Object sendState) 
    --- End of inner exception stack trace --- 
    at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state) 
    at System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) 
    at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result) 
    --- End of inner exception stack trace --- 
    at System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result) 
    at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result) 
    at System.ServiceModel.ClientBase`1.ChannelBase`1.EndInvoke(String methodName, Object[] args, IAsyncResult result) 
    at CERViewer.ESW.ExcelServiceSoapClient.ExcelServiceSoapClientChannel.EndOpenWorkbook(IAsyncResult result) 
    at CERViewer.ESW.ExcelServiceSoapClient.CERViewer.ESW.ExcelServiceSoap.EndOpenWorkbook(IAsyncResult result) 
    at CERViewer.ESW.ExcelServiceSoapClient.EndOpenWorkbook(IAsyncResult result, ObservableCollection`1& status) 
    at CERViewer.ESW.ExcelServiceSoapClient.OnEndOpenWorkbook(IAsyncResult result) 
    at System.ServiceModel.ClientBase`1.OnAsyncCallCompleted(IAsyncResult result)} 

的源代碼:

private void GetFeatures() 
    { 
     ExcelServiceSoapClient = new ExcelServiceSoapClient(); 
     string targetWorkbookPath = "http://phc/Shared%20Documents/sample.xlsx"; 

     xlservice.OpenWorkbookCompleted += new EventHandler<OpenWorkbookCompletedEventArgs>(xlservice_OpenWorkbookCompleted); 
     xlservice.OpenWorkbookAsync(targetWorkbookPath, "en-US", "en-US"); 
    } 

    void xlservice_OpenWorkbookCompleted(object sender, OpenWorkbookCompletedEventArgs e) 
    { 
     sessionId = (string)e.Result; //exception here!!! 
    } 

我試圖通過以下幾種方式,但他們全部失敗。

1:創建文件並將其放在「C:\ Program Files \ Common Files \ Microsoft Shared \ Web Server Extensions \ 14 \ isapi \」上,但它再次失敗。

2:打開SharePoint服務器的跨域工作簿和數據連接的訪問​​,在這裏

我完全新的SharePoint和Silverlight的發展,我四處搜尋在網上卻找不到答案。任何人都可以幫助我?

回答

0

我通過將clientaccesspolicy.xml文件放在服務器根目錄中解決了該問題。