为了账号安全,请及时绑定邮箱和手机立即绑定

WCF命名管道最小示例

WCF命名管道最小示例

C#
白猪掌柜的 2019-08-27 10:43:25
WCF命名管道最小示例我正在寻找WCF命名管道的最小示例(我期望两个最小的应用程序,服务器和客户端,它们可以通过命名管道进行通信。)Microsoft有一篇很好的文章“ 入门教程”,它通过HTTP描述了WCF,我正在寻找类似于WCF和命名管道的东西。我在互联网上发现了几个帖子,但它们有点“先进”。我需要一些最小的,只有强制性的功能,所以我可以添加我的代码并使应用程序正常工作。如何替换它以使用命名管道?<endpoint address="http://localhost:8000/ServiceModelSamples/Service/CalculatorService"     binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ICalculator"     contract="ICalculator" name="WSHttpBinding_ICalculator">     <identity>         <userPrincipalName value="OlegPc\Oleg" />     </identity></endpoint>如何替换它以使用命名管道?// Step 1 of the address configuration procedure: Create a URI to serve as the base address.Uri baseAddress = new Uri("http://localhost:8000/ServiceModelSamples/Service");// Step 2 of the hosting procedure: Create ServiceHostServiceHost selfHost = new ServiceHost(typeof(CalculatorService), baseAddress);try{     // Step 3 of the hosting procedure: Add a service endpoint.     selfHost.AddServiceEndpoint(         typeof(ICalculator),         new WSHttpBinding(),         "CalculatorService");     // Step 4 of the hosting procedure: Enable metadata exchange.     ServiceMetadataBehavior smb = new ServiceMetadataBehavior();     smb.HttpGetEnabled = true;     selfHost.Description.Behaviors.Add(smb);     // Step 5 of the hosting procedure: Start (and then stop) the service.     selfHost.Open();     Console.WriteLine("The service is ready.");     Console.WriteLine("Press <ENTER> to terminate service.");     Console.WriteLine();     Console.ReadLine();     // Close the ServiceHostBase to shutdown the service.     selfHost.Close();}catch (CommunicationException ce){     Console.WriteLine("An exception occurred: {0}", ce.Message);     selfHost.Abort();}如何生成客户端以使用命名管道?
查看完整描述

3 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

我也遵循微软的教程,这很好,但我也只需要管道。

如您所见,您不需要配置文件和所有杂乱的东西。

顺便说一句,他使用HTTP和管道。只需删除与HTTP相关的所有代码行,您就会得到一个纯粹的管道示例。


查看完整回答
反对 回复 2019-08-27
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

试试这个。

这是服务部分。

[ServiceContract]public interface IService{
    [OperationContract]
    void  HelloWorld();}public class Service : IService{
    public void HelloWorld()
    {
        //Hello World
    }}

这是代理

public class ServiceProxy : ClientBase<IService>{
    public ServiceProxy()
        : base(new ServiceEndpoint(ContractDescription.GetContract(typeof(IService)),
            new NetNamedPipeBinding(), new EndpointAddress("net.pipe://localhost/MyAppNameThatNobodyElseWillUse/helloservice")))
    {

    }
    public void InvokeHelloWorld()
    {
        Channel.HelloWorld();
    }}

这是服务托管部分。

var serviceHost = new ServiceHost
        (typeof(Service), new Uri[] { new Uri("net.pipe://localhost/MyAppNameThatNobodyElseWillUse") });
    serviceHost.AddServiceEndpoint(typeof(IService), new NetNamedPipeBinding(), "helloservice");
    serviceHost.Open();

    Console.WriteLine("Service started. Available in following endpoints");
    foreach (var serviceEndpoint in serviceHost.Description.Endpoints)
    {
        Console.WriteLine(serviceEndpoint.ListenUri.AbsoluteUri);
    }


查看完整回答
反对 回复 2019-08-27
  • 3 回答
  • 0 关注
  • 517 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信