Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/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
Visual studio 为什么WCF服务引用名称空间相对于我的WCF客户端项目';默认名称空间是什么?_Visual Studio_Visual Studio 2008_Wcf_Wcf Client - Fatal编程技术网

Visual studio 为什么WCF服务引用名称空间相对于我的WCF客户端项目';默认名称空间是什么?

Visual studio 为什么WCF服务引用名称空间相对于我的WCF客户端项目';默认名称空间是什么?,visual-studio,visual-studio-2008,wcf,wcf-client,Visual Studio,Visual Studio 2008,Wcf,Wcf Client,我有一个名为以下名称空间的WCF服务: MyCompany.MyApplication.Configuration.ConfigurationHelperService 在客户端,我有一个名为的程序集,它使用此服务: MyCompany.MyApplication.Core (this is the default namespace) 当我添加服务引用时,在“添加服务引用”对话框中要求我指定的名称空间最终会固定在客户端程序集名称空间的末尾: MyCompany.MyApplication.

我有一个名为以下名称空间的WCF服务:

MyCompany.MyApplication.Configuration.ConfigurationHelperService
在客户端,我有一个名为的程序集,它使用此服务:

MyCompany.MyApplication.Core (this is the default namespace)
当我添加服务引用时,在“添加服务引用”对话框中要求我指定的名称空间最终会固定在客户端程序集名称空间的末尾:

MyCompany.MyApplication.Core.MyCompany.MyApplication.Configuration
                                                   .ConfigurationHelperService
因为此时要求我提供名称空间,所以指定远程服务名称空间的名称似乎很自然。i、 e.我希望使用名称空间
MyCompany.MyApplication.Configuration.ConfigurationHelperService
引用我的远程服务类,因为从技术上讲它们不是客户端的一部分

我的问题是:

  • 这背后的基本原理是什么,这与语义有关吗
  • 我是否应该尝试通过修改客户端生成的源代码来获得我想要的名称空间来抵制改变这种行为

我已经经历了很长一段时间了(你对ASMX web服务客户端也有同样的问题),但从来没有看到过Visual Studio(我猜是
svcutil.exe
)以这种方式工作的书面解释。

嗯,我想你有两种选择,真的:

  • 如果控制线路的两端,例如编写服务器和客户端,则可以将所有共享项(如服务契约、数据契约等)放入单独的程序集中,并在客户端和服务器之间共享。这样,就不会重复任何内容,通信的两端将引用您选择的给定名称空间中完全相同的项

  • 习惯于这样一个事实:如果您在Visual Studio中添加WCF服务引用,您基本上会得到大量的重复—因为如果您不控制通信的两端,这实际上就是WCF所能做的—服务和客户端之间交换的元数据(通过服务上的WSDL或MEX端点)。由于这显然是客户机的一部分,而客户机与服务完全分离(它们共享的通常是XML模式中定义的wire格式,没有其他内容),因此其名称空间也将面向客户机。我认为这是一个(好的)特性,而不是我想尝试对抗的东西

默认情况下,在使用WCF的SOA世界中,客户机和服务彼此完全独立。两者之间没有“远程对象”连接或类似的连接:客户机代理有一个方法调用,将传入的参数和服务器上要调用的方法的一些信息捆绑在一起,并将其全部序列化为一个序列化消息(读:基本上是文本/XML消息)。该消息通过网络发送到服务器,然后服务器处理该消息并返回响应


因此,这不是一个.NET函数调用或其他什么-系统的这两部分(默认情况下)是绝对独立的。考虑到这一点,至少对我来说,客户端所做的一切都将放在客户端的名称空间中是有意义的——毕竟,服务器可能是完全不同的东西,比如Java、PHP、IBM大型机——您通常不知道它是什么(也不需要知道)

嗯,我想你有两个选择,真的:

  • 如果控制线路的两端,例如编写服务器和客户端,则可以将所有共享项(如服务契约、数据契约等)放入单独的程序集中,并在客户端和服务器之间共享。这样,就不会重复任何内容,通信的两端将引用您选择的给定名称空间中完全相同的项

  • 习惯于这样一个事实:如果您在Visual Studio中添加WCF服务引用,您基本上会得到大量的重复—因为如果您不控制通信的两端,这实际上就是WCF所能做的—服务和客户端之间交换的元数据(通过服务上的WSDL或MEX端点)。由于这显然是客户机的一部分,而客户机与服务完全分离(它们共享的通常是XML模式中定义的wire格式,没有其他内容),因此其名称空间也将面向客户机。我认为这是一个(好的)特性,而不是我想尝试对抗的东西

默认情况下,在使用WCF的SOA世界中,客户机和服务彼此完全独立。两者之间没有“远程对象”连接或类似的连接:客户机代理有一个方法调用,将传入的参数和服务器上要调用的方法的一些信息捆绑在一起,并将其全部序列化为一个序列化消息(读:基本上是文本/XML消息)。该消息通过网络发送到服务器,然后服务器处理该消息并返回响应


因此,这不是一个.NET函数调用或其他什么-系统的这两部分(默认情况下)是绝对独立的。考虑到这一点,至少对我来说,客户端所做的一切都将放在客户端的名称空间中是有意义的——毕竟,服务器可能是完全不同的东西,比如Java、PHP、IBM大型机——您通常不知道它是什么(也不需要知道)

简言之,这就是我的想法。为此干杯。简言之,这就是我的想法。为此干杯。