.net WinForms开发人员的Web服务入门?

.net WinForms开发人员的Web服务入门?,.net,wcf,web-services,authentication,.net,Wcf,Web Services,Authentication,我已经用Winforms编写客户机/服务器应用程序六年了,但我还没有涉足web领域(既不是ASP.NET也不是web服务)。考虑到一段时间以来就业市场的发展方向以及我基本的好奇心,我很想参与编写web服务,但我不知道从哪里开始 我读过各种选项(XML/SOAP vs.JSON,REST vs…嗯,实际上我不知道它叫什么,等等),但我不确定在决定使用其中一种时使用的标准是什么。显然,我希望利用我现有的工具(Visual Studio、.NET framework等),而不必拘泥于只针对特定受众(例

我已经用Winforms编写客户机/服务器应用程序六年了,但我还没有涉足web领域(既不是ASP.NET也不是web服务)。考虑到一段时间以来就业市场的发展方向以及我基本的好奇心,我很想参与编写web服务,但我不知道从哪里开始

我读过各种选项(XML/SOAP vs.JSON,REST vs…嗯,实际上我不知道它叫什么,等等),但我不确定在决定使用其中一种时使用的标准是什么。显然,我希望利用我现有的工具(Visual Studio、.NET framework等),而不必拘泥于只针对特定受众(例如,编写服务的方式会使从Windows Mobile/Android/iPhone客户端消费变得困难)

作为记录,我的计划——目前——是在我的web服务开发中使用WCF,但如果可行的话,我愿意使用另一种.NET方法

我意识到这个问题是非常开放的,所以它可能会被关闭,但我想知道的是:

当我打算写的Web服务(REST等)的类型时,有哪些事情要考虑?从一种方法转移到另一种方法是否可能(如果可行)
  • web服务能否以事件驱动的方式编写?正如我所说的,我是一名Winforms开发人员,所以我习惯于对象引发事件,让我做出反应。例如,如果我有两个客户端连接到我的服务,有没有一种方法可以让我通过另一个客户端的操作将信息“推送”到其中一个客户端?如果这是可能的,这是明智的还是我只是没有正确地考虑它
  • 哪些身份验证机制似乎最适合面向公众的服务?如果我计划让不同类型的操作系统和客户端连接到该服务,会怎么样?是否有一种普遍接受的平台不可知方法
  • 在身份验证方面,这是我应该自己做的事情(对管理会话进行身份验证等),还是应该在框架级别处理这件事情,并且我只定义它应该如何工作?如果是这样的话,我如何判断请求者是谁验证了自己的身份

  • 我开始在我的服务中编写一种身份验证机制(简单的用户名/密码组合存储在数据库中,并使用GUID键创建相应的会话表),只要求在每次操作中传递该键(当然,除了登录),但我想确保我没有在这里重新发明轮子。然而,我也不想仅仅为了使用基本的身份验证就用一堆机器用户帐户来扰乱服务器。我还觉得Digest(当然还有Windows)身份验证需要一个机器(或AD)用户帐户。

    1->REST比SOAP快,因为(我认为)它使用HTTP nativly,但我认为它没有那么安全。SOAP的重量更重,在报头、负载等周围发送SOAP数据包

    2->Use可以使用异步调用,但是您可以像对待任何其他类一样对待它们,尽管没有任何状态

    3->由于我们面向公众的服务的性质,我们有自己的自定义安全Web服务,并向每个方法传递用户cred对象,以确保用户经过身份验证,并具有权限。(这是一个相当简单的解决方案,但它是一个独立的项目)

    4->见3。虽然我确信一定有一些框架gubbins供您使用。如果每个人都在您的域中,我很确定您可以将IIS配置为仅对这些用户进行身份验证


    很抱歉,这不是一个非常详细的答案,就像我说的,如果你把问题分成4个部分,你可能会得到更好的答案。

    1->REST比SOAP更快,因为(我认为)它使用HTTP本机,但我认为它没有那么安全。SOAP的重量更重,在报头、负载等周围发送SOAP数据包

    2->Use可以使用异步调用,但是您可以像对待任何其他类一样对待它们,尽管没有任何状态

    3->由于我们面向公众的服务的性质,我们有自己的自定义安全Web服务,并向每个方法传递用户cred对象,以确保用户经过身份验证,并具有权限。(这是一个相当简单的解决方案,但它是一个独立的项目)

    4->见3。虽然我确信一定有一些框架gubbins供您使用。如果每个人都在您的域中,我很确定您可以将IIS配置为仅对这些用户进行身份验证


    抱歉,这不是一个非常详细的答案,就像我说的,如果你把问题分成4个部分,你可能会得到更好的答案。

    如果你把问题分成几个单独的问题,你可能会得到更多的运气…如果你把问题分成几个单独的问题,你可能会得到更多的运气。。。