“动态设置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
[解决办法]
/// <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")); //不要加..
[解决办法]
//如果是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; }