我有一个简单的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
}
}
答案 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>