Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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# Windows Phone 8:WCF呼叫既不会结束也不会超时_C#_Wcf_Windows Phone 8 - Fatal编程技术网

C# Windows Phone 8:WCF呼叫既不会结束也不会超时

C# Windows Phone 8:WCF呼叫既不会结束也不会超时,c#,wcf,windows-phone-8,C#,Wcf,Windows Phone 8,我有一个WCF服务托管在互联网上。使用Windows应用商店应用程序,我可以很好地调用该服务,因此我知道它正在工作。我正试图通过Windows Phone 8呼叫相同的服务。我已经创建了服务引用,并使用以下代码调用它: using System.ServiceModel; using System.Threading; using System.Threading.Tasks; using TP.Stamping.WCF.WP.Client; using TP.Stamping.WCF.WP.C

我有一个WCF服务托管在互联网上。使用Windows应用商店应用程序,我可以很好地调用该服务,因此我知道它正在工作。我正试图通过Windows Phone 8呼叫相同的服务。我已经创建了服务引用,并使用以下代码调用它:

using System.ServiceModel;
using System.Threading;
using System.Threading.Tasks;
using TP.Stamping.WCF.WP.Client;
using TP.Stamping.WCF.WP.Client.TPStampingClient;

namespace TP.Stamping.WCF.Client
{
    public static class StampingServiceFacade
    {
        public static RegistrationResult RegisterUser(
            string userName, string password,
            string email, string phoneNumber,
            string address1, string address2,
            string city, string province,
            string country, string postal)
        {
            return
                RegisterUserAsync(userName, password, email, phoneNumber, address1, address2, city, province, country,
                    postal).Result;
        }

        public static async Task<RegistrationResult> RegisterUserAsync(
            string userName, string password,
            string email, string phoneNumber,
            string address1, string address2,
            string city, string province,
            string country, string postal)
        {
            var endpointAddress =
                new EndpointAddress(
                    "http://ourserver/TP.Stamping.WCF.Registration.StampingRegistrationService.svc");

            var client = new StampingRegistrationServiceClient("HttpEndpoint", endpointAddress);
            var waiter = new RegistrationWait(client);

            client.RegisterNewUserAsync(userName, ComputeMD5(password), email, phoneNumber, address1, address2,
                city, province, country, postal);

            var results = await waiter.WaitTask();

            return results;
        }

        private static string ComputeMD5(string str)
        {
            return MD5CryptoServiceProvider.GetMd5String(str);
        }

        private class RegistrationWait
        {
            private RegistrationResult _result;

            public RegistrationWait(StampingRegistrationServiceClient client)
            {
                client.RegisterNewUserCompleted += ClientOnRegisterNewUserCompleted;
            }

            private void ClientOnRegisterNewUserCompleted(object sender, RegisterNewUserCompletedEventArgs registerNewUserCompletedEventArgs)
            {
                _result = registerNewUserCompletedEventArgs.Result;
            }

            public Task<RegistrationResult> WaitTask()
            {
                while(_result == RegistrationResult.Error) Thread.Sleep(50);
                return new Task<RegistrationResult>(() => _result);
            }
        }
    }
}
使用System.ServiceModel;
使用系统线程;
使用System.Threading.Tasks;
使用TP.Stamping.WCF.WP.Client;
使用TP.Stamping.WCF.WP.Client.TPStampingClient;
命名空间TP.Stamping.WCF.Client
{
公共静态类StampingServiceFacade
{
公共静态注册结果注册器(
字符串用户名,字符串密码,
字符串电子邮件,字符串电话号码,
字符串地址1,字符串地址2,
弦市,弦省,
字符串国家/地区,字符串邮政)
{
返回
RegisterUserAsync(用户名、密码、电子邮件、电话号码、地址1、地址2、城市、省、国家、,
邮递结果;
}
公共静态异步任务注册表SerAsync(
字符串用户名,字符串密码,
字符串电子邮件,字符串电话号码,
字符串地址1,字符串地址2,
弦市,弦省,
字符串国家/地区,字符串邮政)
{
var端点地址=
新端点地址(
"http://ourserver/TP.Stamping.WCF.Registration.StampingRegistrationService.svc");
var client=新的StampingRegistrationServiceClient(“HttpEndpoint”,endpointAddress);
var WAERER=新注册等待(客户端);
client.RegisterNewSerAsync(用户名、计算机5(密码)、电子邮件、电话号码、地址1、地址2、,
城市、省、国家、邮政);
var results=wait waiter.WaitTask();
返回结果;
}
私有静态字符串ComputeMD5(字符串str)
{
返回MD5CryptoServiceProvider.GetMd5String(str);
}
私有类注册等待
{
私人注册结果_结果;
公共注册等待(StampingRegistrationServiceClient客户端)
{
client.RegisterNewUserCompleted+=ClientOnRegisterNewUserCompleted;
}
私有void clientonregisternewUserCompletedEventArgs已完成(对象发送方,RegisterNewUserCompletedEventArgs RegisterNewUserCompletedEventArgs)
{
_结果=registerNewUserCompletedEventArgs.result;
}
公共任务WaitTask()
{
而(_result==RegistrationResult.Error)Thread.Sleep(50);
返回新任务(()=>\u结果);
}
}
}
}

问题是,当我通过电话呼叫服务时,它永远不会完成。永远不会调用在
ClientOnRegisterNewUserCompleted
上设置断点。我已经做了几个小时了,非常感谢你的帮助

我已经把问题缩小了一点。http连接从未连接到承载服务的Web服务器。使用WireShark,我可以看到从Windows 8应用程序建立的连接,但它们从未在Windows Phone 8应用程序中显示。奇怪的是,手机应用程序从不报告任何类型的错误,它只是挂起,直到进程被终止。好吧,我已经找出了问题所在。WaitTask方法与已完成事件在同一线程上运行,因此thread.Sleep()会阻塞该线程,因此调用永远不会成功。我想我将不得不接受它并异步处理这个问题。请结束这个问题。