没有服务合同接口的WCF是可能的

时间:2014-04-09 19:31:39

标签: c# web-services wcf servicecontract

我正在搜索谷歌知道我们如何轻松地将asmx服务转换为wcf,在那里我看到人们编写代码如

这是我的旧asmx服务

[WebService(Namespace="http://kennyw.com/sampleservices/")]
public class MyService : System.Web.Services.WebService
 { 
[WebMethod]
public string Hello(string name)
  { 
   return string.Format(“Hello {0}.”, name);

  }

}

转换为wcf

[ServiceContract(Namespace="http://kennyw.com/WCFservices/")]
[WebService(Namespace="http://kennyw.com/sampleservices/")]
public class MyService : System.Web.Services.WebService
 { 
[WebMethod]
[OperationContract]
public string Hello(string name)
   { 
    return string.Format(“Hello {0}.”, name);

   }

}
我在转换时看到人们没有使用服务合同界面。它是如何工作的,因为我知道当我们开发wcf服务时,我必须为单个服务编写一个服务契约接口。所以在没有服务合同界面的情况下寻找有关开发wcf服务的可能性的讨论。感谢

2 个答案:

答案 0 :(得分:2)

如果您未在web.config中指定正确的合同命名,则上述操作无效。

如果没有接口的类位于以下命名空间中:

namespace Foo
{
    [ServiceContract(Namespace="http://kennyw.com/WCFservices/")]
    [WebService(Namespace="http://kennyw.com/sampleservices/")]
    public class MyService : System.Web.Services.WebService
    { 
        [WebMethod]
        [OperationContract]
        public string Hello(string name)
        { 
            return string.Format(“Hello {0}.”, name);

        }
    }
}

在这种情况下,Web配置服务配置应该类似于

<services>
    <service name="YourServiceName">
        <endpoint address="" behaviorConfiguration="httpBehavior" binding="webHttpBinding" contract="Foo.MyService"/>
    </service>
</services>

答案 1 :(得分:2)

因为针对接口的编程是一件好事,原因如下:

  • 例如,一个非常重要的原因是您可以轻松地在单元测试中使用它,以便您可以轻松地模拟或存根(并设置它的期望)。

    IYourInterfaceMethods stub = MockRepository.GenerateStub();

    IYourInterfaceMethods mock = MockRepository.GenerateMock();

如果您在大公司,当您不是为自己编写代码并完成JIRA任务时,您通常可以为其他人,为您的大学编程。您正在为他们创建API,他们可以使用和重用(从而降低公司的成本)。在这种情况下,您应该将服务的实现放在一个单独的库中,并且只公开它们可以调用的接口,并重用您的主要部分。但在这种情况下会发生的事情是,当有人开始使用您的服务(例如可以发送短信,这需要花钱,或者例如运行5分钟的处理某些复杂的计算)时,他将需要能够如果他想对它进行单元测试,那就嘲笑它吧。因此,您的代码必须是可测试的,您可以通过界面公开您的功能来实现它。这样,您的API的用户可以使用不花钱的简单框架(因为您仍然可以使用其他单元测试框架,这些框架不需要使用接口,但它们不是免费的。)

  • 如果您将接口放入单独的库中,则API的用户只能拥有此库以及他们使用的接口。如果你的接口稳定(不经常更改),他们不必重新编译他们的代码,很少需要重新部署他们的应用程序(移动,网络等)。在大公司中,部署新版本可能很危险。他们喜欢坚持一个黄金计划:如果没有破坏,不要修理它。对你有什么好处?您可以随心所欲地使用具体实现,修复错误,修复此问题,重构,删除......一般都有乐趣,但不会伤害任何人:) ...

  • 使用接口还有很多其他原因,程序员的安全等等。但我认为以上是最重要的2。

我希望我能帮忙。