Web表单中的WCF服务库引用(asp.net)

Web表单中的WCF服务库引用(asp.net),asp.net,wcf,Asp.net,Wcf,我不确定这样做是否正确,但我了解到您不希望在web表单项目中有WCF服务库引用,而是将端点添加到web.config中,这是真的吗 以下是我所做的: 创建WCF服务库项目 创建一个名为“MyService.svc”的简单服务 网络表单: 创建web项目 创建一个WCF服务,其中包含以下代码 <%@ ServiceHost Language="C#" Service="WCFJQuery.ContactBLL.Implementation.ContactUs" Factory

我不确定这样做是否正确,但我了解到您不希望在web表单项目中有WCF服务库引用,而是将端点添加到web.config中,这是真的吗

以下是我所做的:

  • 创建WCF服务库项目
  • 创建一个名为“MyService.svc”的简单服务
  • 网络表单:

  • 创建web项目
  • 创建一个WCF服务,其中包含以下代码

    <%@ ServiceHost Language="C#"
        Service="WCFJQuery.ContactBLL.Implementation.ContactUs"
        Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory" %>
    
    
    
  • 右键单击web项目并“添加引用”,然后从WCF服务库项目中添加MyService.dll引用


  • 这是你应该怎么做的吗

    如果控制通信的两端(服务器端和客户端),并且都是.NET,则有两个选项:

  • 或者像通常那样添加服务引用(如果您不能控制双方的话)——在这种情况下,您会得到一个客户端代理类,该类实现服务方法的代理,并且所有数据契约都是重复的(在客户端代理命名空间中获得类,这些类将序列化到来回发送的消息中的同一XML表示形式并从中反序列化-但这些类不同,因为它们位于不同的命名空间中)
  • 或者,可选地:

  • 您可以将所有服务契约、数据契约等放在一个单独的“MyService.contracts”程序集中(可以随意调用),然后您可以共享该程序集;在服务器端,实现服务约定的代码将引用该共享程序集-在客户端,您基本上做了相同的事情:您的客户端项目将添加对该共享程序集的引用,现在您拥有了所有数据约定(您的“消息”类型)仅一次-在共享程序集命名空间中
  • 选项2确实有其明显的优势,但同样:

    • 只有当你控制了交流的双方,它才会起作用
    • 只有当双方都是.NET代码时,它才起作用
    • 由于您不使用内置的添加服务引用机制,因此可能需要手动创建一些客户端配置(其实并不难)

    我希望这能给你一些想法和见解-如果你有进一步的具体问题-你知道去哪里问!

    如果你控制通信的两端(服务器端和客户端),并且两者都是.NET,你有两个选择:

  • 或者像通常那样添加服务引用(如果您不能控制双方的话)——在这种情况下,您会得到一个客户端代理类,该类实现服务方法的代理,并且所有数据契约都是重复的(在客户端代理命名空间中获得类,这些类将序列化到来回发送的消息中的同一XML表示形式并从中反序列化-但这些类不同,因为它们位于不同的命名空间中)
  • 或者,可选地:

  • 您可以将所有服务契约、数据契约等放在一个单独的“MyService.contracts”程序集中(可以随意调用),然后您可以共享该程序集;在服务器端,实现服务约定的代码将引用该共享程序集-在客户端,您基本上做了相同的事情:您的客户端项目将添加对该共享程序集的引用,现在您拥有了所有数据约定(您的“消息”类型)仅一次-在共享程序集命名空间中
  • 选项2确实有其明显的优势,但同样:

    • 只有当你控制了交流的双方,它才会起作用
    • 只有当双方都是.NET代码时,它才起作用
    • 由于您不使用内置的添加服务引用机制,因此可能需要手动创建一些客户端配置(其实并不难)

    我希望这能给你一些想法和见解-如果你有进一步的具体问题-你知道去哪里问!

    你可能听说了如何在网站“项目”中使用WCF。在我看来,更好的解决方案是使用Web应用程序项目,而不是使用文件->新建项目。网站“项目”行为怪异,与Visual Studio中的其他项目类型不同。

    您可能听说了如何在网站“项目”中使用WCF。在我看来,更好的解决方案是使用Web应用程序项目,而不是使用文件->新建项目。网站“项目”行为怪异,与Visual Studio中的其他项目类型不同。

    +1-是的,绝对是-使用Web应用程序项目-更好、更具控制力。就像你觉得奇怪的是什么,只是好奇地想知道。就像它们是在运行时生成的,而不是在编译时生成的。就像没有项目文件一样。就像它们在每个方面都不同于其他项目一样Visual Studio中的另一种项目。区别应该是对Microsoft的提示,但他们没有得到提示。+1-是的,肯定-使用Web应用程序项目-更好,控制更多。比如你觉得奇怪什么,只是好奇。比如它们是在运行时生成的,而不是在编译时生成的。比如没有项目文件。与Visual Studio中的其他项目一样,它们在各个方面都有所不同。这种差异本应是对Microsoft的提示,但他们没有得到提示。感谢您的回复,目前我的设置是(客户端/服务器)在.net中,所以我在我的网站项目中添加了我的程序集引用,并且工作得很好,但我只是想确保我遵循了正确的模式。感谢您的回复,目前我的设置是(客户端/服务器)在.net中,所以我在我的网站项目中添加了我的程序集引用,工作得很好,但我只是想确保我遵循了正确的模式。