gpt4 book ai didi

c# - WCF 服务导出 1 个接口(interface)和 2 个实现类

转载 作者:行者123 更新时间:2023-11-30 17:52:00 25 4
gpt4 key购买 nike

我是 WCF 和 C# 的新手。

我正在尝试创建一个具有 1 个接口(interface) (IA) 和 1 个方法 (Do) 的 WCF 服务,该方法具有 2 个实现(A1 和 A2)。

一个愚蠢的例子:

IA.cs:

namespace IA_NS
{
[ServiceContract]
public interface IA
{
[OperationContract]
int Do(B b);
}

[DataContract]
public class B
{
[DataMember]
public string b1 { get; set; }
}
}

A1.cs:

namespace A1_NS
{
public class A1 : IA
{
public int Do(B b) {...}
}
}

A2.cs:

namespace A2_NS
{
public class A2 : IA
{
public int Do(B b) {...}
}
}

我的自托管控制台,我在其中托管这两项服务:

class Program
{
static void Main(string[] args)
{
ServiceHost hostA1 = new ServiceHost(typeof(A1_NS.A1));
hostA1.Open();
ServiceHost hostA2 = new ServiceHost(typeof(A2_NS.A2));
hostA2.Open();
Console.WriteLine("Hit any key to exit...");
Console.ReadLine();
hostA1.Close();
hostA2.Close();
}
}

我希望我的 WCF 客户端能够调用这两个类:

Client.cs:

namespace Client_NS
{
class Program
{
static void Main(string[] args)
{
B myB = new B();
A1 a1 = new A1();
A2 a2 = new A2();
A1.Do(myB);
A2.Do(myB);
}
}
}

运气不好;-(

我尝试将 2 个元素放入我的 WCF 服务 app.config:

<service name="A1_NS.A1" >
<endpoint address="http://localhost/A1"
contract="IA_NS.IA" />
</service>
<service name="A2_NS.A2" >
<endpoint address="http://localhost/A2"
contract="IA_NS.IA" />
</service>

运行调试器时 - 调试应用程序(WCF 服务主机)让我测试两个类的 Do() 方法。

我无法让我的客户这样做。我为这两项服务添加了服务引用。是客户端 app.config 还是我误解了什么?

最佳答案

您可以实现部分类,允许您在单独的 cs 文件中分离您的内容,同时维护单个接口(interface)和端点。这不是最理想的方式,因为在一天结束时它仍然是一个由部分类组成的单一类,但至少它在你的文件结构中看起来像它,因此提供了一些分离而不是一个庞大的类文件.

示例结构:

IMyService.cs

[ServiceContract]
public interface IMyService
{
[OperationContract]
string GenericMethod()

[OperationContract]
string GetA(int id)

[OperationContract]
string GetB(int id)

}

MyService.cs

//Put any attributes for your service in this class file
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public partial class MyService : IMyService
{
public string GenericMethod()
{
return "";
}
}

AService.cs

public partial class MyService
{
public string GetA(int id)
{
return "";
}
}

BService.cs

public partial class MyService
{
public string GetB(int id)
{
return "";
}
}

关于c# - WCF 服务导出 1 个接口(interface)和 2 个实现类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18756032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com