C# 没有人在听
我正在尝试托管自己的wcf,并且不参与app.config文件。我的wcf服务是我的wpf项目的一部分。主机代码为C# 没有人在听,c#,wpf,wcf,C#,Wpf,Wcf,我正在尝试托管自己的wcf,并且不参与app.config文件。我的wcf服务是我的wpf项目的一部分。主机代码为 host = new ServiceHost(typeof(Service1), new Uri("http://" + System.Net.Dns.GetHostName() + ":8733/DatabaseTransferWcfServiceLibaryMethod/Service1/")); ServiceMetadataBehavior smb = host.Descr
host = new ServiceHost(typeof(Service1), new Uri("http://" + System.Net.Dns.GetHostName() + ":8733/DatabaseTransferWcfServiceLibaryMethod/Service1/"));
ServiceMetadataBehavior smb = host.Description.Behaviors.Find<ServiceMetadataBehavior>();
if (smb == null)
{
smb = new ServiceMetadataBehavior();
}
BasicHttpBinding q = new BasicHttpBinding(BasicHttpSecurityMode.None);
q.CloseTimeout = new TimeSpan(1, 1, 0);
q.OpenTimeout = new TimeSpan(1, 1, 0);
q.ReceiveTimeout = new TimeSpan(1, 1, 0);
q.SendTimeout = new TimeSpan(1, 1, 0);
q.AllowCookies = false;
q.BypassProxyOnLocal = false;
q.MaxBufferSize = 2147483646;
q.MaxBufferPoolSize = 2147483646;
q.MaxReceivedMessageSize = 2147483646;
q.ReaderQuotas.MaxArrayLength = 2147483646;
q.ReaderQuotas.MaxBytesPerRead = 2147483646;
q.ReaderQuotas.MaxDepth = 2147483646;
q.ReaderQuotas.MaxNameTableCharCount = 2147483646;
q.ReaderQuotas.MaxStringContentLength = 2147483646;
host.AddServiceEndpoint(typeof(IService1), q, "");
smb.HttpGetEnabled = true;
smb.MetadataExporter.PolicyVersion = PolicyVersion.Default;
host.Description.Behaviors.Add(smb);
host.AddServiceEndpoint(typeof(IService1), q, "http://" + System.Net.Dns.GetHostName() + ":8733/DatabaseTransferWcfServiceLibaryMethod/Service1/");
host.AddServiceEndpoint(new UdpDiscoveryEndpoint());
host.Open();
我得到错误的客户端代码是
var ep = "http://" + System.Net.Dns.GetHostName() + ":8733/DatabaseTransferWcfServiceLibaryMethod/Service1/";
var binding = new BasicHttpBinding();
binding.Security.Mode = BasicHttpSecurityMode.None;
binding.SendTimeout = new System.TimeSpan(0, 1, 30);
ChannelFactory<IService1> wcfFactory = new ChannelFactory<IService1>(binding, new EndpointAddress(ep));
IService1 wcf = wcfFactory.CreateChannel();
System.Net.ServicePointManager.DefaultConnectionLimit = 200;
wcf.generateId(System.Environment.MachineName);
我已经关闭了防火墙,所以这不是导致错误的原因
任何关于我哪里出错的想法。看看评论。当我做出这两个改变时,一切都很好
static void Main(string[] args)
{
var host = new ServiceHost(typeof(Service1), new Uri("http://" + System.Net.Dns.GetHostName() + ":8733/DatabaseTransferWcfServiceLibaryMethod/Service1/"));
ServiceMetadataBehavior smb = host.Description.Behaviors.Find<ServiceMetadataBehavior>();
if (smb == null)
{
smb = new ServiceMetadataBehavior();
}
BasicHttpBinding q = new BasicHttpBinding(BasicHttpSecurityMode.None);
q.CloseTimeout = new TimeSpan(1, 1, 0);
q.OpenTimeout = new TimeSpan(1, 1, 0);
q.ReceiveTimeout = new TimeSpan(1, 1, 0);
q.SendTimeout = new TimeSpan(1, 1, 0);
q.AllowCookies = false;
q.BypassProxyOnLocal = false;
q.MaxBufferSize = 2147483646;
q.MaxBufferPoolSize = 2147483646;
q.MaxReceivedMessageSize = 2147483646;
q.ReaderQuotas.MaxArrayLength = 2147483646;
q.ReaderQuotas.MaxBytesPerRead = 2147483646;
q.ReaderQuotas.MaxDepth = 2147483646;
q.ReaderQuotas.MaxNameTableCharCount = 2147483646;
q.ReaderQuotas.MaxStringContentLength = 2147483646;
host.AddServiceEndpoint(typeof(IService1), q, "");
smb.HttpGetEnabled = true;
smb.MetadataExporter.PolicyVersion = PolicyVersion.Default;
host.Description.Behaviors.Add(smb);
// ADD ServiceDiscoveryBehavior
host.Description.Behaviors.Add(new ServiceDiscoveryBehavior());
// COMMENT THIS LINE
host.AddServiceEndpoint(typeof(IService1), q, "http://" + System.Net.Dns.GetHostName() + ":8733/DatabaseTransferWcfServiceLibaryMethod/Service1/");
host.AddServiceEndpoint(new UdpDiscoveryEndpoint());
host.Open();
var ep = "http://" + System.Net.Dns.GetHostName() + ":8733/DatabaseTransferWcfServiceLibaryMethod/Service1/";
var binding = new BasicHttpBinding();
binding.Security.Mode = BasicHttpSecurityMode.None;
binding.SendTimeout = new System.TimeSpan(0, 1, 30);
ChannelFactory<IService1> wcfFactory = new ChannelFactory<IService1>(binding, new EndpointAddress(ep));
IService1 wcf = wcfFactory.CreateChannel();
System.Net.ServicePointManager.DefaultConnectionLimit = 200;
Console.WriteLine(wcf.GenerateId(System.Environment.MachineName));
}
您是否在同一台计算机上运行客户端和服务器?如果不是,您需要在客户端代码中将System.Net.Dns.GetHostName更改为服务器的地址。是的,它是同一台机器。首先,我在执行后的代码中发现一些错误:1。System.InvalidOperationException:需要ServiceDiscoveryBehavior来支持DiscoveryEndpoint。2.System.InvalidOperationException:此服务有多个端点正在侦听,这些端点共享您在app.config中定义的端点中留下的相同启动操作,这就是为什么会出现这样的错误。我不知道为什么,但由于再次启动计算机,它正在工作。