【问题标题】:self host wcf add service reference自主机 wcf 添加服务引用
【发布时间】:2011-12-07 00:18:44
【问题描述】:

所以我创建了 winforms 客户端并将 wcf 类库添加到解决方案中。

在winforms中我会这样做

ServiceHost svc = new ServiceHost(typeof(...), new Uri("net.pipe://localhost/MyNamedPipe")

然后svc.Open() 执行良好。

现在,如何添加服务引用,以便在相同的 winform 中获取该 wcf 的代理?

我只能通过使用运行 winforms 时启动的 ASP.NET 开发服务器来生成它,因此我复制了该 url,停止调试(开发服务器仍在运行),然后从那里添加服务引用。但我猜那是不正确的。

当然我可以直接引用wcf合约类并使用它,但这也不合适。

【问题讨论】:

    标签: c# .net winforms wcf


    【解决方案1】:

    当你像这样控制两端时,我更喜欢使用 ChannelFactory

    NetNamedPipeBinding binding = new NetNamedPipeBinding();
    EndpointAddress address = new EndpointAddress("net.pipe://localhost/MyNamedPipe");
    ChannelFactory<YourInterface> factory = new ChannelFactory<YourInterface>(binding, address);
    YourInterface yourInterface = factory.CreateChannel();
    

    【讨论】:

    • 因为通过添加对您自己的服务的引用,您最终将得到动态生成的重复代码。当您无法轻松访问真实的接口定义时,您需要动态生成的东西。您可以轻松访问它,因此请使用它。
    • 我写了 svc = new ServiceHost(typeof(TokenizationService1.TokenizationService), new Uri("net.pipe://localhost/MyNamedPipe")); svc.Open(); ChannelFactory f = new ChannelFactory(new NetNamedPipeBinding(), new EndpointAddress("net.pipe://localhost/MyNamedPipe"));服务 = f.CreateChannel();
    • 但是当稍后调用 service.Tokenize(value) 时,我得到超时异常,显然客户端没有看到它。伙计,这很难(
    • 您正在尝试使用 WinForms 应用程序的主 UI 线程来调用自己。您会得到一个超时,因为线程正在等待自己返回消息泵以服务调用。那永远不会发生,因此超时。你需要重新考虑你的设计。尝试在您的服务主机中调用您自己的 WCF 服务表单并没有什么意义。
    • 不,罗素。那不是问题。将 serviceMetadata 添加到行为解决了它。stackoverflow.com/questions/2579288/…
    【解决方案2】:

    您是否尝试过向项目添加服务引用...,然后直接在对话框的地址框中输入您的 URI?

    请注意,这应该是完整的 URI,例如 net.pipe://localhost/MyNamedPipe。

    您可以从 MSDN here 找到分步说明。

    【讨论】:

    • 我不知道有人能做到这一点。但是当我点击发现时,它会在解决方案中为我提供服务并指示我一些 localhost:3049,尽管我将 netPipeBinding 放在服务配置中。
    • @Nickolodeon:不要点击发现,只需输入完整的 URI:net.pipe://localhost/MyNamedPipe。
    • @Nickolodeon:用附加信息更新答案。
    • 我也试过那个地址。但是为什么服务参考会找到它 - 我认为当时没有创建管道。需要托管和启动服务,因此它创建了管道。但为了托管它,我需要先生成代理类。就像 catch 22 (((。不过让我检查一下你的链接。
    猜你喜欢
    • 1970-01-01
    • 2011-12-24
    • 2011-03-29
    • 1970-01-01
    • 2011-05-17
    • 2014-05-08
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    相关资源
    最近更新 更多