Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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
Asp.net mvc 在asp.net mvc 4中使用Wcf服务_Asp.net Mvc_Wcf_Asp.net Mvc 4 - Fatal编程技术网

Asp.net mvc 在asp.net mvc 4中使用Wcf服务

Asp.net mvc 在asp.net mvc 4中使用Wcf服务,asp.net-mvc,wcf,asp.net-mvc-4,Asp.net Mvc,Wcf,Asp.net Mvc 4,我有一个用vb.net编写的WCF服务。我想在c#MVC4客户端应用程序中使用它。但是,当我通过右键单击引用添加此服务并添加服务引用时,我无法使用此服务。我如何才能做到这一点?您的服务代码包含合同和实施。但是,服务代码应仅在服务中使用,而不是在客户端程序中使用。您应该生成代理类以供客户端程序(如Asp.NET应用程序)使用 有两种典型方式: 1.运行该服务,然后创建对该服务实例的服务引用,这样VSIDE将在文件夹服务引用下生成代理类。 2.对包含协定的服务程序集使用svcutil.exe生成代理

我有一个用vb.net编写的WCF服务。我想在c#MVC4客户端应用程序中使用它。但是,当我通过右键单击引用添加此服务并添加服务引用时,我无法使用此服务。我如何才能做到这一点?

您的服务代码包含合同和实施。但是,服务代码应仅在服务中使用,而不是在客户端程序中使用。您应该生成代理类以供客户端程序(如Asp.NET应用程序)使用

有两种典型方式: 1.运行该服务,然后创建对该服务实例的服务引用,这样VSIDE将在文件夹服务引用下生成代理类。 2.对包含协定的服务程序集使用svcutil.exe生成代理类,并构建客户端API程序集


第二种是最整洁、最有效的方式。请在

查看本文了解更多详细信息这是一个非常基本的问题,但一般来说,您可以在主web.Config文件中添加web服务引用和端点信息,但我怀疑您在调用WCF服务URL时遇到了问题,如果是这样,我发布了一个通用类/包装器的示例,用于在MVC应用程序中调用WCF web服务

将Web引用添加到Visual Studio 2012(或类似内容):

在解决方案资源管理器中的项目上单击鼠标右键 选择添加–>服务参考–>然后单击高级按钮…–> 然后单击“添加Web引用…”按钮–>然后在URL框中键入Web服务的地址。然后单击绿色箭头,VisualStudio将发现并显示您的Web服务。 您可能已经知道上面的内容,并且可能只需要一个通用的包装器类,它使在MVC中调用WCF Web服务变得容易。我发现使用泛型类效果很好。我不能因此而受到赞扬;在互联网上找到的,没有归属。有一个完整的示例,其中包含可下载的源代码,它调用了使用PowerBuilder 12.5.Net创建的WCF Web服务,但是在MVC中调用WCF Web服务的过程是相同的,无论它是在Visual Studio还是PowerBuilder中创建的

用于在ASP.NET MVC中调用WCF Web服务的通用包装类

当然,不要在我不完整的示例之后对错误处理进行建模

using System;
using System.ServiceModel;
namespace LinkDBMvc.Controllers
{
   public class WebService<T> 
   {
     public static void Use(Action<T> action)  
     {
       ChannelFactory<T> factory = new ChannelFactory<T>("*");
       T client = factory.CreateChannel();
       bool success = false;
       try
       {
          action(client);
          ((IClientChannel)client).Close();
          factory.Close();
          success = true;
       }
       catch (EndpointNotFoundException e)
       {
          LinkDBMvc.AppViewPage.apperror.LogError("WebService", e, "Check that the Web Service is running");
       }
       catch (CommunicationException e)
       {
          LinkDBMvc.AppViewPage.apperror.LogError("WebService", e, "Check that the Web Service is running");
       }
       catch (TimeoutException e)
       {
          LinkDBMvc.AppViewPage.apperror.LogError("WebService", e, "Check that the Web Service is running");
       }
       catch (Exception e)
       {
          LinkDBMvc.AppViewPage.apperror.LogError("WebService", e, "Check that the Web Service is running");
       }
       finally
       {
         if (!success)
         {
           // abort the channel
           ((IClientChannel)client).Abort();
           factory.Abort();
         }
       }
     }
  }
}
使用系统;
使用System.ServiceModel;
命名空间LinkDBMvc.Controllers
{
公共类Web服务
{
公共静态无效使用(操作)
{
ChannelFactory工厂=新的ChannelFactory(“*”);
T client=factory.CreateChannel();
布尔成功=假;
尝试
{
行动(客户);
((IClientChannel)client.Close();
工厂关闭();
成功=真实;
}
捕获(EndpointNotFounde异常)
{
LinkDBMvc.AppViewPage.apperror.LogError(“WebService”,即“检查Web服务是否正在运行”);
}
捕获(通信异常e)
{
LinkDBMvc.AppViewPage.apperror.LogError(“WebService”,即“检查Web服务是否正在运行”);
}
捕获(超时异常e)
{
LinkDBMvc.AppViewPage.apperror.LogError(“WebService”,即“检查Web服务是否正在运行”);
}
捕获(例外e)
{
LinkDBMvc.AppViewPage.apperror.LogError(“WebService”,即“检查Web服务是否正在运行”);
}
最后
{
如果(!成功)
{
//中止频道
((IClientChannel)client.Abort();
factory.Abort();
}
}
}
}
}

定义“不能使用此”。您是否收到错误?例如:使用WcfSupplierService;当我在控制器上添加此引用时,我得到一个错误。我无法创建wcf客户端实例。什么错误?为什么不能创建客户端实例?找不到类型或命名空间名称“WcfSupplierService”(是否缺少using指令或程序集引用?)c:\users\burak.taskiran\documents\visual studio 2013\projects\firstmvcdemo\TedarikSimobile\controllers\accountcontroller.cs错误。但我添加了服务引用。