Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 没有人在听_C#_Wpf_Wcf - Fatal编程技术网

C# 没有人在听

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

我正在尝试托管自己的wcf,并且不参与app.config文件。我的wcf服务是我的wpf项目的一部分。主机代码为

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中定义的端点中留下的相同启动操作,这就是为什么会出现这样的错误。我不知道为什么,但由于再次启动计算机,它正在工作。