我正在制作网络服务(由于.net req而无法转移到wcf)。我的WebServiceRequest类包含其他类的列表。当我尝试编译代码时,我得到以下错误:
request.List = list;
无法隐式转换类型 'System.Collections.Generic.List'到 'ServiceReference1.foo []'
当我request.List = list.ToArray();
时,此错误消失了
但是当我运行代码时,我得到了这个例外:
接收HTTP响应时发生错误 http://localhost:60380/fooService/fooService.asmx。这可能是应该的 不使用HTTP协议的服务端点绑定。这个 也可能是由于HTTP请求上下文被中止 服务器(可能是由于服务关闭)。查看服务器日志 了解更多详情。
内部例外:
基础连接已关闭:发生意外错误 收到。
服务器堆栈跟踪:
在 System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(引发WebException webException,HttpWebRequest请求,HttpAbortReason abortReason)
在 System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(时间跨度 超时)at System.ServiceModel.Channels.RequestChannel.Request(消息消息, TimeSpan超时)at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(消息 消息,TimeSpan超时)at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway,ProxyOperationRuntime操作,Object [] ins, 对象[]出局,TimeSpan超时)at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway,ProxyOperationRuntime操作,Object [] ins, 对象[]出局) System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall,ProxyOperationRuntime operation)at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(即时聊天 消息)在[0]处重新抛出异常:at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(即时聊天 reqMsg,IMessage retMsg)at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&安培; msgData,Int32类型)at ServiceReference1.testpingtestSoap.Calculatetestping(CalculatetestpingRequest1 请求) ServiceReference1.testpingtestSoapClient.ServiceReference1.testpingtestSoap.Calculatetestping(CalculatetestpingRequest1 请求)在c:\ Users \ User \ AppData \ Local \ Temp \ Temporary ASP.NET中 Files \ test \ 2e05987f \ 91110734 \ App_WebReferences.rwmro5zd.0.cs:第855行 在 ServiceReference1.testpingtestSoapClient.Calculatetestping(CalculatetestpingRequest _request)在c:\ Users \ User \ AppData \ Local \ Temp \ Temporary ASP.NET Files \ test \ 2e05987f \ 91110734 \ App_WebReferences.rwmro5zd.0.cs:line 862 在testCost2.Calculatetestping()中 C:\用户\用户\桌面\测试\ InfoSystem \ testping \ testCost2.aspx.cs:线 203在testCost2.Submit_Go(Object sender,EventArgs e)中 C:\用户\用户\桌面\测试\ InfoSystem \ testping \ testCost2.aspx.cs:线 148在System.Web.UI.WebControls.Button.OnClick(EventArgs e)at System.Web.UI.WebControls.Button.RaisePostBackEvent(字符串 eventArgument)at System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(字符串 eventArgument)at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl,String eventArgument)at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
在System.Web.UI.Page.ProcessRequestMain(布尔值 includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)
编辑1: 要求&响应Web服务的类
public class Item
{
public List<string> Composites { get; set; }
public string Composites_List { get { return string.Join(", ", Composites.ToArray()); } }
public List<px> pxes { get; set; }
public List<ox> oxes { get; set; }
public List<MethodCalculationType> MethodCalculationTypes { get; set; }
public ShippingItem() { }
public void ShippingItemFill(string sku, int quantity)
{
\\this method is just written to avoid parameterless constructor error
}
public static ItemComparison = delegateItem item1, Item item2) { return item1.Area.CompareTo(item2.Area); };
}
public class Request
{
public List<Item> ItemList;
public bool showAllRatesField;
public bool m_Ignore;
public string pTextField;
public decimal TotalField;
}
public class Responce
{
public od [] ods;
}
答案 0 :(得分:0)
发现问题,您可以根据需要在参数中使用尽可能多的Lists<>
webservice,这是我发现的;如果有人需要它:
1.
通过在服务器端向web.config添加以下内容,在服务器上启用了dignostics
<system.diagnostics> <trace autoflush="true" /> <sources> <source name="System.Web.Services.Asmx"> <listeners> <add name="AsmxTraceFile" type="System.Diagnostics.TextWriterTraceListener" initializeData="local.log" traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId" /> </listeners> </source> </sources> <switches> <add name="System.Web.Services.Asmx" value="Verbose" /> </switches> </system.diagnostics>
2.
当发生Http异常时;在日志文件中,它写了error reading or writing a variable
我在webservice代码中查找了该变量,该变量为internal
,从该变量中删除了内部关键字,代码开始工作。
结果soap
需要参数化序列化,因此自定义参数类中的任何变量都应该是公共读/写。正如John Saunders所提到的那样here
答案 1 :(得分:-2)
首先使用.asmx,我忘记了你不能返回一个列表,你必须返回一个数组,所以它期待一个数组
至于第二个例外,您的服务未正确配置/设置。如果您想要修复,则需要发布更多代码。
顺便提一下服务器事件日志。 有时这可能会有所帮助。 开始菜单 - &gt;管理工具 - &gt;事件查看器。查看应用程序日志。