2012-12-10 90 views
7

在搜索了我应该使用的整个一天之后,我不确定哪种选择最适合我的需求,所以我希望有更多经验的人能帮助我。用于将Windows应用程序连接到MVC 4的Web服务或Web API?

我有一个winforms应用程序(c#)和一个ASP.NET MVC 4 web应用程序(c#)。 我希望连接这些,目标是发送和接收来自我在MVC 4项目中使用的数据库的数据,但是从Windows窗体应用程序中。我从窗口发送的数据形成应用程序到数据库,然后由MVC 4 Web应用程序使用。

我对网络服务/ Web Api完全不熟悉,所以我不能真正决定哪种选择最好。任何帮助将不胜感激。

+1

@hawbsl:你为什么要在这个问题上给予赏金?如果有什么不清楚的地方,我想你最好开始自己的问题,在那里你解释当前答案中缺少的内容。 – CodeCaster

+1

@CodeCaster问题已经足够清楚了(这或多或少是我想问的问题),添加一个复制问题是没有意义的。我希望更多更好的答案和更多的答案审查(即使是现有的单一答案可能是好的,但我可能不知道可以判断,它没有任何upvotes) – hawbsl

回答

1

鉴于你使用过的标签,我的猜测是你决定在SOAP Web服务和WCF之间。鉴于这两个,我说去WCF。 SOAP Web服务(在Visual Studio中实现)是旧技术;仍然可以维护,但WCF可以完成较旧的SOAP服务可以执行的任何操作(包括看起来完全像SOAP服务)等等。

如果您有一个将您的Web服务器连接到数据库服务器的Web服务(这两件事应该放在不同的计算机上;您的Web服务器必须暴露于世界,而DB服务器应该像Fort诺克斯),我看不出为什么你不应该使用内部WinForms应用程序(使用LAN/VPN访问数据库服务器上的服务层)的同样的服务。对于必须通过Internet访问数据的WinForms应用程序,我建议将该服务重新实现为支持安全加密数据传输的WCF服务。您还可以将服务端点设置为仅接受HTTPS连接,因此只需通过SSL/TLS运行现有服务即可。

您选择的内容主要取决于您可以承诺多少时间资源来解决问题;转移到HTTPS是一种快速修复,只需很少的代码更改即可完成,而在WCF中重新实现将需要更多时间,但是除了简单的安全通道外,还可以实现其他安全措施。

+0

谢谢你的快速答案。 Windows窗体应用程序将作为产品销售,因此将有许多不同的用户需要通过互联网访问数据库。 此外,我不选择SOAP或WCF,我选择所有可能的解决方案之间,因为我没有这方面的经验。 我想我会添加一个WCF服务到我的MVC项目,如你所建议的。再次感谢您的答复。 “ –

3

如果您已经创建MVC4项目,那么你可以添加动作的任何控制器 并返回JSON数据如下图所示:

public JsonResult GetCategoryList() 
{ 
    var list = //return list 
    return Json(list, JsonRequestBehavior.AllowGet); 
} 

,或者你可以的MVC4创建新项目,并选择WEBAPI模板。这将创建的WebAPI项目为你。它将会创造例子。所以它会容易产生webapi。在webapi它返回的数据自动转换为xmlrequest

jsonWCF的Web API抽象映射到ASP.NETWeb API大致如下

WCF Web AP -> ASP.NET Web API 
Service -> Web API controller 
Operation -> Action 
Service contract -> Not applicable 
Endpoint -> Not applicable 
URI templates -> ASP.NET Routing 
Message handlers -> Same 
Formatters -> Same 
Operation handlers -> Filters, model binders 

Other Links

+0

_”所以创建webapi将很容易。“_ - 现在试图强类型消费该服务,例如Windows应用程序,因为这是这个问题是什么,我会说:跳过的WebAPI,并与WCF去 – CodeCaster

+0

你将如何保证JSON的GetCategoryList让。 _only_的Winforms应用程序可以使用它并没有其他人 – hawbsl

+0

获取用户名和密码作为参数,然后就可以验证和授权users.like贝宝的WebAPI – Nirmal

1

还是轻量级的东西像南希:http://nancyfx.org/

+0

你想说什么更多关于它是什么以及为什么要使用它?主页并不完全包含电梯间距 – hawbsl

0

而不是专门提倡WCF,我建议WCF Data ServicesOData,并规定您需要保护它。如果你使用纯粹的WCF,你会发现你最终会创建大量的代码来处理从数据库中检索信息,然后将这些信息发回给客户端。起初这听起来并不坏,但是在数据库中有大约30个实体后,您很快就会厌倦纯粹的解决方案WCF

OData很好,它使用Entity Framework,它可以快速打开现有数据库的数据操作,或者打开一个数据库。如果您可以确保您的服务安全,它将为您节省大量的开发时间。数据响应的格式很灵活。有很多客户端库也可以移植到其他编程语言中。

确保服务的步骤非常简单。始终部署到https。任何登录或注册方法都需要是发布方法,返回令牌(加密值)或唯一秘密,可以加密并发送回任何后续请求。最好使用令牌,并且对令牌有一个过期。否则,无论您的服务和您的应用程序是移动还是桌面,都需要共享加密/解密方法。

2

如果你有一个MVC 4应用程序已经,这将是更好地使用网络API(RESTful服务) 我假设你已经在构建REST API的一些知识(POST的理解,PUT,更新的东西)

它的配置和使用很简单。所有您需要的实际上是创建一个新的控制器,如:

class MyApiController: ApiController { 

    public Post(SomeClass item) { 
     ....connect to db and do whatever you need with the data 
    } 
} 

您还应该配置Api的路由。

然后在你的winForms应用程序中,你可以简单地使用HttpClient类来执行api调用。

HttpClient aClient = new HttpClient(); 

// Uri is where we are posting to: 
Uri theUri = new Uri("https://mysite.com/api/MyApi"); 

// use the Http client to POST some content (‘theContent’ not yet defined). 
aClient.PostAsync(theUri, new SomeClass()); 

在一些实施细节在这里看看: Web Api Getting Started

开始使用WCF也不是那么容易的使用Web API。

1

我们在使用MVC4 WebApi时遇到了一些问题,最终在服务器端为Web客户端使用了ServiceStack JavaScript/AJAX,为胖客户端使用RestSharp

我们的一个具体问题是无法自动生成文档,显着的性能差异以及对单元/集成测试的更好支持。

相关问题