读书人

“动态设置WCF Service配置信息” 远程

发布时间: 2012-04-15 18:39:21 作者: rapoo

“动态设置WCF Service配置信息” 远程服务器返回了错误: NotFound
wcf是同一个,
使用以上两种方式调用,自动生成的好用,动态调用,就抛异常
如下是两个按钮的代码:

private void button1_Click(object sender, RoutedEventArgs e) {
Service1Client client = new Service1Client();
client.DoWorkCompleted += (s1, e1) => { MessageBox.Show(e1.Result); };
client.DoWorkAsync();
}


private void button2_Click(object sender, RoutedEventArgs e) {
BasicHttpBinding binding = new BasicHttpBinding(
Application.Current.Host.Source.Scheme.Equals("https", StringComparison.InvariantCultureIgnoreCase) ? BasicHttpSecurityMode.Transport : BasicHttpSecurityMode.None);
binding.MaxReceivedMessageSize = int.MaxValue;
binding.MaxBufferSize = int.MaxValue;

Service1Client client = new Service1Client(binding, new EndpointAddress(new Uri(Application.Current.Host.Source, "../Service1.svc")));
client.DoWorkCompleted += (s1, e1) => { MessageBox.Show(e1.Result); };
client.DoWorkAsync();

}

button1就好用,button2就抛异常

如下是wcf
[ServiceContract(Namespace = "")]
[SilverlightFaultBehavior]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Service1 {
[OperationContract]
public string DoWork() {
// 在此处添加操作实现
return "ok";
}
}


[解决办法]
抛出的异常提示什么?

[解决办法]
是不是有跨域调用的问题?
可以参考一下:
http://tech.ddvip.com/2009-02/1235820134110054.html
http://www.cnblogs.com/Mainz/archive/2011/02/22/1961381.html
[解决办法]

C# code
        /// <summary>        /// 获取服务器根地址(包括端口号)        /// </summary>        public static Uri GetServerRootAddress()        {            StringBuilder sb = new StringBuilder();            sb.Append(Application.Current.Host.Source.Scheme + "://" + Application.Current.Host.Source.Host);            if (Application.Current.Host.Source.Port != 80)            {                sb.Append(":" + Application.Current.Host.Source.Port.ToString());            }            return new Uri(sb.ToString());                    }        /// <summary>        /// 获取服务器EndpointAddress        /// </summary>        /// <param name="ServerRelativePath">服务器相对路径</param>        /// <returns></returns>        public static EndpointAddress GetEndpointAddress(string ServerRelativePath)        {            System.ServiceModel.EndpointAddress endpoint = new System.ServiceModel.EndpointAddress(               new Uri(GetServerRootAddress(), ServerRelativePath), null);            return endpoint;                   }        //看你是使用什么绑定 双工是PollingDuplexHttpBinding,还是 BasicHttpBinding         //以下是双工        PollingDuplexHttpBinding binding = new PollingDuplexHttpBinding();            binding.InactivityTimeout = TimeSpan.FromMinutes(9); //出错前,允许最大的空闲时间(每分钟主动轮询一次)            binding.ReceiveTimeout = TimeSpan.FromMinutes(11);            binding.MaxBufferSize = int.MaxValue;            binding.MaxReceivedMessageSize = int.MaxValue;            binding.DuplexMode = PollingDuplexMode.SingleMessagePerPoll;        Service1Client  client= new Service1Client(binding, ClientFunction.GetEndpointAddress("/Service1.svc"));  //不要加..
------解决方案--------------------


Service1Client client= new Service1Client(binding, GetEndpointAddress("/Service1.svc")); //不要加..

[解决办法]

C# code
       //如果是BasicHttpBinding 绑定       /// <summary>        /// 获取绑定        /// </summary>        /// <returns></returns>        public static BasicHttpBinding CurrentBinding()        {            BasicHttpBinding binding = new BasicHttpBinding(Application.Current.Host.Source.Scheme.Equals("https", StringComparison.InvariantCultureIgnoreCase) ? BasicHttpSecurityMode.Transport : BasicHttpSecurityMode.None);            binding.MaxReceivedMessageSize = int.MaxValue;            binding.MaxBufferSize = int.MaxValue;            binding.OpenTimeout = new TimeSpan(0, 5, 0);            binding.SendTimeout = new TimeSpan(0, 5, 0);            binding.CloseTimeout = new TimeSpan(0, 1, 0);            binding.ReceiveTimeout = new TimeSpan(0, 10, 0);            return binding;        } 

读书人网 >CAD教程

热点推荐