1

Silverlight5アプリケーション/.NET4.0アプリケーションでWCFデータサービスを利用しようとしています。サービスを手動で照会すると、AtomフィードとしてWebブラウザーにデータが表示されます。

ただし、標準的なアプローチでデータをクエリしようとすると、次のエラーが発生します。

{System.Security.SecurityException:セキュリティエラー。System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)at System.Data.Services.Http.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)at System.Data.Services.Client.QueryResult.AsyncEndGetResponse(IAsyncResult asyncResult)}

内部例外はnullです。したがって、意味のある情報はまだ利用できません。

私のコード

public partial class ProjectWindow : ChildWindow
{
XYZEntitis.XYZEntitis db = new XYZEntitis.XYZEntitis(new Uri("http://google.com/wcfdataservice1.svc/"));


    DataServiceCollection<XYZEntitis.Label> dscCats = new DataServiceCollection<XYZEntitis.Label>();
    CollectionViewSource customerAddressViewSource;
    ObservableCollection<XYZEntitis.Label> labelsBindingCollection = new ObservableCollection<XYZEntitis.Label>();
public ProjectWindow()
    {
        InitializeComponent();
        btnBack.IsEnabled = false;
        //Load Project categories
        BindProjectCategories();
    }
public void BindProjectCategories()
        {
            #region Code
            //#############################################
            //Approach # 01 : Raises Security Exception
            //#############################################
            //DataServiceQuery<XYZEntitis.Label> query = db.Labels;
            //query.BeginExecute(
            //    s =>
            //    {
            //        var state = s.AsyncState as DataServiceQuery<XYZEntitis.Label>;
            //        var data = new ObservableCollection<XYZEntitis.Label>();
            //        foreach (var entity in state.EndExecute(s))
            //            data.Add(entity);
            //        cbCategoryName.ItemsSource = data;
            //    }, query);
            #endregion
            //#############################################
            //Approach No # 2 : 0 Records are returned
            //#############################################
            var cats = from cat in db.Labels select cat;
            //cats.ToList();
            dscCats.LoadCompleted += this.dscCats_LoadCompleted;
            dscCats.LoadAsync(cats);

            //#############################################
            //Approach # 3 : Security Exception
            //#############################################
            //var query = from cat in db.Labels select cat;
            //((DataServiceQuery<XYZEntitis.Label>)query).BeginExecute(OnCategoriesFecthComplete, query);
        }
private void OnCategoriesFecthComplete(IAsyncResult ar)
    {
        var query = ar.AsyncState as DataServiceQuery<XYZEntitis.Label>;

        // Get the response of the query.
        var response = query.EndExecute(ar);
        foreach (XYZEntitis.Label label in response)
        {
            labelsBindingCollection.Add(label);
        }
        cbCategoryName.ItemsSource = labelsBindingCollection;
    }
private void dscCats_LoadCompleted(object sender, LoadCompletedEventArgs e)
    {
        if (dscCats.Continuation != null)
        {
            dscCats.LoadNextPartialSetAsync();
        }
        else
        {

            cbCategoryName.ItemsSource = dscCats;
            #region code

            //var data = (DataServiceCollection<XYZEntitis.Label>)sender;
            //cbCategoryName.ItemsSource = data;
            //cbCategoryName.DisplayMemberPath = "Name";   

            //customerAddressViewSource =
            //       (CollectionViewSource)this.Resources["customerAddressViewSource"];
            //customerAddressViewSource.Source = dscCats;
            #endregion
        }

    }

}

完全なスタックトレース(スタックトレース1):

System.InvalidOperationExceptionはユーザーコードによって処理されませんでしたMessage=この要求の処理中にエラーが発生しました。StackTrace:at System.Data.Services.Client.BaseAsyncResult.EndExecute [T](Object source、String method、IAsyncResult asyncResult)at System.Data.Services.Client.QueryResult.EndExecute [TElement](Object source、IAsyncResult asyncResult)at System.Data.Services.Client.DataServiceRequest.EndExecute [TElement](Object source、DataServiceContext context、IAsyncResult asyncResult)at System.Data.Services.Client.DataServiceQuery`1.EndExecute(IAsyncResult asyncResult)at ThreatModeler.Silverlight.ProjectWindow.OnCategoriesFecthComplete (IAsyncResult ar)System.Data.Services.Client.BaseAsyncResult.HandleCompleted()atSystem.Data.Services.Client.QueryResult。DisplayClass1.b _0(IAsyncResult asyncResult)atSystem.Net.Browser.ClientHttpWebRequest。<>c_ DisplayClass1a.b_18(Object state2)at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)at System.Threading.ExecutionContext.Run(ExecutionContextexecutionContext、ContextCallback callback、Object state、BooleanpreserveSyncCtx)at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem .ExecuteWorkItem()at System.Threading.ThreadPoolWorkQueue.Dispatch()at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()InnerException:System.Security.SecurityExceptionメッセージ=セキュリティエラー。StackTrace:System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)at System.Data.Services.Http.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)atSystem.Data.Services.Client。

完全なスタックトレース(スタックトレース#02)

{System.InvalidOperationException:このリクエストの処理中にエラーが発生しました。---> System.Security.SecurityException:セキュリティエラー。System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)at System.Data.Services.Http.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)at System.Data.Services.Client.QueryResult.AsyncEndGetResponse(IAsyncResult asyncResult)---終了内部例外スタックトレースの---System.Data.Services.Client.BaseAsyncResult.EndExecute[T](Object source、String method、IAsyncResult asyncResult)at System.Data.Services.Client.QueryResult.EndExecute [TElement](Object source、IAsyncResult asyncResult)at System.Data.Services.Client.DataServiceRequest.EndExecute [TElement](Object source、DataServiceContext context、0(IAsyncResult s)at System.Data.Services.Client.BaseAsyncResult.HandleCompleted()at System.Data.Services.Client.QueryResult.AsyncEndGetResponse(IAsyncResult asyncResult)atSystem.Data.Services.Client.BaseAsyncResult。<>c _DisplayClass1 .b_ 0(IAsyncResult asyncResult)atSystem.Net.Browser.ClientHttpWebRequest。<>cSystem.Threading.QueueUserWorkItemCallback.System.ThreadingのSystem.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)の_DisplayClass1a.b__18(Object state2) .IThreadPoolWorkItem.ExecuteWorkItem()at System.Threading.ThreadPoolWorkQueue.Dispatch()at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()}

4

1 に答える 1

5

これは私のために働いた。私のサービスで

  1. [インストールされたテンプレート]で[データ]を選択し、[XMLファイル]を選択します。ファイルにclientaccesspolicy.xmlという名前を付けます。
  2. ファイルに次の内容を入力します。
<?xml version="1.0" encoding="utf-8"?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from http-request-headers="*">
        <domain uri="http://*" />
        <domain uri="https://*" />
      </allow-from>
      <grant-to>
        <resource path="/" include-subpaths="true"/>
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>
于 2013-01-03T20:18:05.473 に答える