我有客户端和主机简单的WCF应用程序。 整个WCF架构是默认的,客户端逻辑是在添加服务引用后由Visual Studio添加的。 应用程序工作很长时间,突然停止了今天的工作。 在debugging期间,我看到,问题是,客户端无法打开通道。 没有例外,debugging器只是不进入下一个执行步骤。 主机通常打开服务。 我没有改变任何代码。 我试图编写新的WCF应用程序,它不工作出于同样的原因。
谷歌没有帮助我。 我会很感激任何build议如何解决这个问题。 🙂
这里是我提到的应用程序代码的一部分:
[ServiceContract] public interface iClientsQueries { [OperationContract] resRegisterUser RegisterUser(reqRegisterUser request); }
客户端:
public class ClientLogic { User CurrentUser { get; set; } public ClientLogic(string phoneNumber) { client = new iClientsQueriesClient("WSHttpBinding_iClientsQueries"); CurrentUser = new User() { PhoneNumber = phoneNumber, IsRegistered = true }; } async public void RegisterUser() { var req = new reqRegisterUser() { QueryAuthor = CurrentUser }; resRegisterUser res; try { res = client.RegisterUser(req); notFinished = false; } catch (Exception ex) { notFinished = true; } } }
主持人:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] public class HostLogic : iClientsQueries { public void StartHostng() { Uri hostAddress = new Uri(UriAddress); try { host = new ServiceHost(this, hostAddress); host.AddServiceEndpoint(typeof(iClientsQueries), new WSHttpBinding(), "TestService"); ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); smb.HttpGetEnabled = true; host.Description.Behaviors.Add(smb); host.Open(); HostOn = true; } catch (Exception ex) { LogsWriter.WriteExceptionLog(ex); HostOn = false; host.Abort(); } } public void StopHosting() { if (host != null) host.Close(); HostOn = false; } public resRegisterUser RegisterUser(reqRegisterUser request) { // LOGIC HERE } }
当这样的事情发生时,我通常会做的事情是在客户端和服务器上配置WCF消息日志记录,并希望出现。 在某些情况下,Windows事件日志包含可能有所帮助的日志条目。
要配置WCF消息日志记录,您需要按照此处所述更新您的App.config文件。
<system.diagnostics> <sources> <source name="System.ServiceModel.MessageLogging"> <listeners> <add name="messages" type="System.Diagnostics.XmlWriterTracelistner" initializeData="c:\logs\messages.svclog" /> </listeners> </source> </sources> </system.diagnostics> <system.serviceModel> <diagnostics> <messageLogging logEntireMessage="true" logMalformedMessages="false" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="false" maxMessagesToLog="3000" maxSizeOfMessageToLog="2000"/> </diagnostics> </system.serviceModel>