从C#控制台应用程序迁移和运行REST API到ASP.NET

从C#控制台应用程序迁移和运行REST API到ASP.NET,第1张

概述需求: 需要在Hosting Server上部署REST API.因此,将代码从C#控制台应用程序迁移到ASP.NET,该代码在localhost上成功运行,但有一些错误 这是下面的代码 using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI; 需求:
需要在Hosting Server上部署REST API.因此,将代码从C#控制台应用程序迁移到ASP.NET,该代码在localhost上成功运行,但有一些错误

这是下面的代码

using System;using System.Collections.Generic;using System.linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.ServiceModel;using System.ServiceModel.Web;using System.Net;using System.Diagnostics;namespace WebAPI{    [ServiceContract]    public interface ICalculator    {        [OperationContract,WebInvoke(UriTemplate = "/sum",Method = "POST",BodyStyle = WebMessageBodyStyle.Wrapped,RequestFormat = Webmessageformat.Json,ResponseFormat = Webmessageformat.Json)]        double sum(double x,double y);    }    public class Calculator : ICalculator    {        public double sum(double x,double y)        {            return x + y;        }    }    public partial class Default : System.Web.UI.Page    {        protected voID Page_Load(object sender,EventArgs e)        {            DeBUG.Writeline("Initializing URL");            string baseAddress = "http://localhost:8081/Calculator";            WebServiceHost myHost = new WebServiceHost(typeof(Calculator),new Uri(baseAddress));            try            {                System.Diagnostics.DeBUG.Writeline("Starting Service ...");                myHost.open();            }            catch (Exception ex)            {                //Response.Write(ex);                //System.Diagnostics.DeBUG.Writeline("Exception");                //myHost.Close();                //throw new FaultException(ex.Message);            }        }    }}

实际结果:


在通过PostMan客户端软件发出/发送POST请求时,除了在DeBUG的输出窗口中显示的错误之外,还显示了计算值.

The thread 0x3104 has exited with code 0 (0x0).Application Insights Telemetry (unconfigured): {"name":"Microsoft.ApplicationInsights.Dev.Request","time":"2019-03-22T07:52:36.2582149Z","Tags":{"ai.internal.sdkVersion":"web: 2.0.0.25000","ai.device.roleInstance":"DESKtop-5DRIFMH","ai.operation.name":"GET /default.aspx","ai.operation.ID":"mHfoluFrMKQ="},"data":{"baseType":"RequestData","baseData":{"ver":2,"ID":"mHfoluFrMKQ=","name":"GET /default.aspx","startTime":"2019-03-22T13:22:36.2582149+05:30","duration":"00:00:04.1154559","success":true,"responseCode":"200","url":"http://localhost:29989/default.aspx","httpMethod":"GET","propertIEs":{"DeveloperMode":"true"}}}}'IISexpress.exe' (CLR v4.0.30319: /LM/W3SVC/2/ROOT-1-131977147547841156): Loaded 'C:\windows\Microsoft.Net\assembly\GAC_32\System.Transactions\v4.0_4.0.0.0__b77a5c561934e089\System.Transactions.dll'. Skipped loading symbols. Module is optimized and the deBUGger option 'Just My Code' is enabled.The thread 0x332c has exited with code 0 (0x0)

刷新页面后,以下代码引发了异常

myHost.Close();

CommunicationObjectFaultedException was unhandled by user codeAn exception of type 'System.ServiceModel.CommunicationObjectFaultedException' occurred in System.ServiceModel.dll but was not handled in user codeAdditional information: The communication object,System.ServiceModel.Web.WebServiceHost,cannot be used for communication because it is in the Faulted state.Exception thrown: 'system.invalIDOperationException' in System.ServiceModel.dllException thrown: 'System.ServiceModel.CommunicationObjectFaultedException' in System.ServiceModel.dll'IISexpress.exe' (CLR v4.0.30319: /LM/W3SVC/2/ROOT-1-131977214492956233): Loaded 'C:\windows\assembly\GAC_MSIL\Microsoft.VisualStudio.DeBUGger.Runtime.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.DeBUGger.Runtime.dll'. Skipped loading symbols. Module is optimized and the deBUGger option 'Just My Code' is enabled.

throw new FaultException(ex.Message);

CommunicationObjectFaultedException was unhandled by user codeAn exception of type 'System.ServiceModel.CommunicationObjectFaultedException' occurred in System.ServiceModel.dll but was not handled in user codeAdditional information: The communication object,cannot be used for communication because it is in the Faulted state.Exception thrown: 'system.invalIDOperationException' in System.ServiceModel.dllExceptionException thrown: 'System.ServiceModel.CommunicationObjectFaultedException' in System.ServiceModel.dll'IISexpress.exe' (CLR v4.0.30319: /LM/W3SVC/2/ROOT-1-131977154884215275): Loaded 'C:\windows\assembly\GAC_MSIL\Microsoft.VisualStudio.DeBUGger.Runtime.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.DeBUGger.Runtime.dll'. Skipped loading symbols. Module is optimized and the deBUGger option 'Just My Code' is enabled.

如果没有Catch Block,则会在“事件”选项卡的“诊断工具”窗口中堆叠以下异常

Exception: Exception thrown: 'system.invalIDOperationException' in System.ServiceModel.dll ("The Channeldispatcher at 'http://localhost:8081/Calculator' with contract(s) '"ICalculator"' is unable to open its IChannelListener."). Exception thrown: 'system.invalIDOperationException' in System.ServiceModel.dll ("The Channeldispatcher at 'http://localhost:8081/Calculator' with contract(s) '"ICalculator"' is unable to open its IChannelListener.")

我怎么需要捕获这些异常

更改字符串baseAddress =“http://somedomain.xy:8081 / Calculator”;
并将其上传到服务器中
PostMan显示为

Could not get any response There was an error connecting to
07001.

预期结果:
通过PostMan进行调用时,需要显示计算值
因为我需要在托管服务器上启动并运行服务.因为我既无法找出问题的根本原因,也无法解决整个问题的解决方案,无论是从编码部分d出还是端口问题?

解决方法
The thread 0x3104 has exited with code 0 (0x0).Application Insights Telemetry (unconfigured): {"name":"Microsoft.ApplicationInsights.Dev.Request","propertIEs":{"DeveloperMode":"true"}}}}'IISexpress.exe' (CLR v4.0.30319: /LM/W3SVC/2/ROOT-1-131977147547841156): Loaded 'C:\windows\Microsoft.Net\assembly\GAC_32\System.Transactions\v4.0_4.0.0.0__b77a5c561934e089\System.Transactions.dll'. Skipped loading symbols. Module is optimized and the deBUGger option 'Just My Code' is enabled.The thread 0x332c has exited with code 0 (0x0)

“输出”窗口中的这些行都是完全正常的,可以忽略(当不再使用时,线程退出时出现非错误代码0,遥测日志记录,程序集被加载到IIS进程中).

您之后遇到的具体错误是因为您尝试多次托管WCF服务.这就是它第一次加载页面时的工作原理,但在刷新页面后失败(因为您已重新配置并重新启动了另一个服务实例).

虽然您的代码可以在控制台应用程序中运行,但这不是您在IIS中托管WCF服务的方式.在Microsoft Docs站点上有一个详细的设置演练:

Deploying an Internet Information Services-Hosted WCF Service

虽然完整的教程不适合Stack Overflow答案,但我将引用一般步骤:

Ensure that IIS,ASP.NET,WCF,and the WCF activation component are correctly installed and registered.

Create a new IIS application,or reuse an existing ASP.NET application.

Create a .svc file for the WCF service.

Deploy the service implementation to the IIS application.

Configure the WCF service.

总结

以上是内存溢出为你收集整理的从C#控制台应用程序迁移和运行REST API到ASP.NET全部内容,希望文章能够帮你解决从C#控制台应用程序迁移和运行REST API到ASP.NET所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1233306.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存