Wcf应用程序无法打开频道

时间:2015-06-23 12:11:06

标签: .net windows wcf

我有一个简单的Wcf应用程序与客户端和主机。整个Wcf体系结构是默认的,添加服务引用后,Visual Studio会添加客户端逻辑。应用程序运行良好很长时间,突然它今天停止工作。在调试过程中我看到,问题是,客户端无法打开通道。没有例外,调试器只是没有进入下一个执行步骤。主机通常会打开服务。我没有更改代码中的任何内容。我尝试编写新的Wcf应用程序,但由于同样的原因它无效。

谷歌没有帮助我。我很感激任何建议如何解决这个问题。 :)

以下是我提到的应用程序代码的一部分:

[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
    }
}

1 个答案:

答案 0 :(得分:0)

当这样的事情发生时,我通常会在客户端和服务器上配置WCF消息记录并希望出现问题。在某些情况下,Windows事件日志包含可能有用的日志条目。

要配置WCF消息日志记录,您需要按照here所述更新App.config文件。

<system.diagnostics>
  <sources>
    <source name="System.ServiceModel.MessageLogging">
      <listeners>
        <add name="messages"
             type="System.Diagnostics.XmlWriterTraceListener"
             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>