Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 来自Silverlight的WCF呼叫提供了一个;空";对象,在WPF中它可以工作_C#_Wpf_Wcf_Silverlight - Fatal编程技术网

C# 来自Silverlight的WCF呼叫提供了一个;空";对象,在WPF中它可以工作

C# 来自Silverlight的WCF呼叫提供了一个;空";对象,在WPF中它可以工作,c#,wpf,wcf,silverlight,C#,Wpf,Wcf,Silverlight,我有一个类,它在WPF和SL中共享相同的代码 我现在的问题是,我在SL中有一个WCF调用,它为我提供了一个空对象,但当我在WPF中运行相同的代码时,它可以工作: 这是我的电话: private async void Selector_OnSelectionChanged(object sender, SelectionChangedEventArgs e) { var channel = CommonClient.Instance.MainCommonService.

我有一个类,它在WPF和SL中共享相同的代码

我现在的问题是,我在SL中有一个WCF调用,它为我提供了一个空对象,但当我在WPF中运行相同的代码时,它可以工作:

这是我的电话:

  private async void Selector_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        var channel = CommonClient.Instance.MainCommonService.Channel;

        var info = new OperationModeStateInfoDTO() { Name = this.OperationMode.Name, State = this.OperationMode.CurrentState };
        var ret = await Task.Factory.FromAsync((a, b) => channel.BeginSwitchOperationModeCp(CommonClient.Instance.SessionId, info, a, b), (r) => channel.EndSwitchOperationModeCp(r), TaskCreationOptions.None);
        SecurityClient.CheckSecurityAnswerAndReportError(ret);
    }
在Silverlight中调用“info”变量中的对象时,该对象在服务器上为null。当我在WPF中调用它时,它工作了!变量before(SessionId)的值起作用,意味着我在SL和WPF中得到了该值

而且类operationModerateInfoDTO在WPF&SL中具有相同的共享代码

在这里:

发现我自己的错误

我有两个WCF接口,一个在服务器上使用,另一个在客户端使用WPF和SL

服务器端:

    [OperationContract(IsOneWay = false)]
    SecurityAnswerDTO SwitchOperationModeCp(string sessionId, OperationModeStateInfoDTO myOperationModeStates);
客户端:

    [OperationContract(IsOneWay = false, AsyncPattern = true)]
    IAsyncResult BeginSwitchOperationModeCp(string sessionId, OperationModeStateInfoDTO myOperationModeState, AsyncCallback callback, object state);
    SecurityAnswerDTO EndSwitchOperationModeCp(IAsyncResult res);         
问题在于接口中参数的名称不同:myOperationModerates和myOperationModerate! 但我不明白的是,它在WPF中工作,即使参数不同

我在这里找到了答案:

    [OperationContract(IsOneWay = false, AsyncPattern = true)]
    IAsyncResult BeginSwitchOperationModeCp(string sessionId, OperationModeStateInfoDTO myOperationModeState, AsyncCallback callback, object state);
    SecurityAnswerDTO EndSwitchOperationModeCp(IAsyncResult res);