C# SOA,将方法公开为服务是一个好主意吗?

C# SOA,将方法公开为服务是一个好主意吗?,c#,soap,soa,sca,C#,Soap,Soa,Sca,示例不是创建类库并在主程序中引用它,而是将该方法公开为web服务 通过这种方式,当您想要更改方法时,无需重新编译,您可以更改任何需要更改的内容,但是,这会带来网络开销:( 正在考虑这样做,但不确定。(不喜欢网络开销,似乎没有必要??) 事实并非如此。如果需要更改方法,则需要重新编译web服务主机 只有当您有一个分布式网络应用程序时,使用SOA才是一个好主意,这很可能还需要跨平台。如果本地应用程序使用服务来执行应用程序的常规任务,那么这是错误的。有很多理由可以解释为什么解耦层是一个好主意,SOA是

示例不是创建类库并在主程序中引用它,而是将该方法公开为web服务

通过这种方式,当您想要更改方法时,无需重新编译,您可以更改任何需要更改的内容,但是,这会带来网络开销:(

正在考虑这样做,但不确定。(不喜欢网络开销,似乎没有必要??)

事实并非如此。如果需要更改方法,则需要重新编译web服务主机


只有当您有一个分布式网络应用程序时,使用SOA才是一个好主意,这很可能还需要跨平台。如果本地应用程序使用服务来执行应用程序的常规任务,那么这是错误的。

有很多理由可以解释为什么解耦层是一个好主意,SOA是最根本的解决方案之一但避免编译消费组件可能不是决定是否要解耦的好标准。

您可以在不使用web服务的情况下实现SOA风格。这将模拟您试图实现的分离。只要公共方法不变,就不必重新编译consumer。唯一不正确的情况是,如果您使用的是版本控制的文件,并且您更改了版本

public class MyFakeService
{
   public static int DoSomethingHere(int value1, int value2)
   {
       // Do stuff here

   }
}
现在在你的消费者

public void MyMethod()
{

int value1 = 3;
int value2 = 4;

int newvalue = MyFakeService.DoSomethingHere(value1, value2);
Console.WriteLine(newvalue);

}

无论您如何更改MyFakeService—只要公共签名和类签名保持不变—您都很好。

web服务的理念不是停止重新编译。如果您不了解客户端,并且需要在客户端和服务器之间建立公共通信路径,则应使用web服务。例如,当您部署web se时即使是.Net客户端也可以通过查看wsdl并调用服务来生成代码


但是,如果只有主程序访问此方法,则将其用作库是更好的方法。

是的,您需要编译web服务,而不是消费者客户端应用程序。是的,如果系统的总体架构假定存在客户客户端应用程序,则使用SOA是一个好主意,正如我提到的。这就是编写s标准程序:)
public void MyMethod()
{

int value1 = 3;
int value2 = 4;

int newvalue = MyFakeService.DoSomethingHere(value1, value2);
Console.WriteLine(newvalue);

}