在我的应用程序(Windows Phone)中,我通过后面的代码动态生成与WCF Web服务的连接。 用户必须指定Web服务的URL然后我创建我的EndPointAddress和Binding,它运行良好。 但是,如果用户输入了无效的URL,则会抛出异常:
“System.ServiceModel.EndpointNotFoundException - >没有端点侦听[服务的地址]可以接受消息。这通常是由不正确的地址或SOAP操作引起的。如果存在,请参阅InnerException以获取更多信息方式“。
innerexception非常经典:“远程服务器在InnerException返回错误:NotFound。”
问题:我无法处理此异常。我在这里尝试了许多没有成功的事情。
有没有解决方案?
我唯一能找到的就是参考Reference.cs中的一些方法,这绝对不是一个好主意......!
提前谢谢你,抱歉我的英语不好:)!
我的实际代码如下所示,但它没有捕获异常=>
MyServiceClient client = new MyServiceClient(myBinding, myEndpointAddress);
try
{
client.RegisterUserCompleted += new EventHandler<RegisterUserCompletedEventArgs>(client_RegisterUserCompleted);
client.RegisterUserAsync();
}
catch (TimeoutException ex)
{
MessageBox.Show(ex.Message);
client.Abort();
}
catch (FaultException ex)
{
MessageBox.Show(ex.Message);
client.Abort();
}
catch (CommunicationException ex)
{
MessageBox.Show(ex.Message);
client.Abort();
}
catch
{
MessageBox.Show("Error");
client.Abort();
}
finally
{
client.CloseAsync();
}
答案 0 :(得分:2)
public void ValidateUri(String uri)
{
if (!Uri.IsWellFormedUriString(uri, UriKind.RelativeOrAbsolute)) return;
request = WebRequest.Create(uri);
request.BeginGetResponse(new AsyncCallback(ValidateUriCallback), null);
}
private WebRequest request;
private void ValidateUriCallback(IAsyncResult result)
{
try
{
WebResponse httpResponse = (WebResponse)request.EndGetResponse(result);
// Create the client here
ServiceClient client = new MyServiceClient(myBinding, myEndpointAddress);
client.RegisterUserCompleted += new EventHandler<RegisterUserCompletedEventArgs>(client_RegisterUserCompleted);
client.RegisterUserAsync();
}
catch (WebException ex)
{
var response = ex.Response as System.Net.HttpWebResponse;
if (response!=null
&& response.StatusCode == HttpStatusCode.NotFound)
{
Dispatcher.BeginInvoke(delegate()
{
MessageBox.Show("The web service address is not valid", "Sorry", MessageBoxButton.OK);
});
}
}
答案 1 :(得分:0)
您需要将try catch移动到client_RegisterUserCompleted方法并环绕 var x = e.Result;
如果可行或浏览时显示错误,请将其添加到
中托管WCF服务的Web应用程序的web.config中<system.diagnostics> <sources> <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true"> <listeners> <add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData= "Trace.svclog" /> </listeners> </source> </sources> </system.diagnostics>
然后运行您的应用程序或浏览它。它将在与Web应用程序相同的目录中创建Trace.svclog文件。打开该文件并在红色条目中查找突出显示的内容。这将为您提供有关异常的更多信息。默认情况下,WCF不会返回完整信息以减缓恶意用户的速度。