我正在尝试创建一个WCF应用程序,它将侦听来自供应商系统的请求.供应商为我提供了WSDL,因此我需要创建一个服务并将其"端点"暴露给他们.
我已经使用SvcUtil.exe生成C#类,但它输出了相当奇怪的类型.
这是给我的WSDL的片段:
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<s:schema elementFormDefault="qualified">
<s:element name="Submit">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Incident">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" form="unqualified" name="TransactionId" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" form="unqualified" name="TransactionType" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" form="unqualified" name="TransactionSubType" type="s:string" />
<s:element minOccurs="0" maxOccurs="unbounded" form="unqualified" name="ConfigurationItem">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" form="unqualified" name="AssetTag" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" form="unqualified" name="Name" type="s:string" />
....
Run Code Online (Sandbox Code Playgroud)
我运行的命令很简单
svcutil.exe file_name.wsdl
Run Code Online (Sandbox Code Playgroud)
我希望这会创建一个这样的结构:
class Submit { ... } …Run Code Online (Sandbox Code Playgroud) 我正在调查为什么我的一个应用程序运行得很慢.应用程序生成并显示网格,并使用工作任务填充它(呈现为表格单元格).在每个任务中都有一个<a href="...可以提供有关任务的更多信息.
因为这都是从代码隐藏中动态构建的,所以我习惯于HTMLTableRows/Cells创建行和单元格,然后使用Controls属性进行添加HTMLAnchors.每当我设置的属性我用HTMLAnchor.HRef,HTMLTableCell.ColSpan等等.
我注意到如果我使用泛型HTMLGenericControl然后使用它的Attributes集合,例如
HTMLGenericControl a = new HTMLGenericControl("a");
a.Attributes["href"] = task.getLink();
Run Code Online (Sandbox Code Playgroud)
它的运行速度明显快于我认为是做同样事情的首选方式:
HtmlAnchor a = new HTMLAnchor;
a.HRef = task.getLink();
Run Code Online (Sandbox Code Playgroud)
有没有人对这个明显的额外"开销"来自哪里有任何解释?
编辑
如果有人对我的解释感到困惑,我发布了同一项目的另一个问题,该问题有截图.
我有以下 JSON 文档:
{
"pbid": 123,
"pid": 0,
"time": 1483551745000,
"timestamp": "2017-01-04 17:42:25",
"creationTime": 1483551789000,
"creationTimestamp": "2017-01-04 17:43:09",
"name": "myname",
"triggeredComponents": [
{
"device": {
"did": 20,
"ip": "127.0.0.1",
"firstSeen": 1427474095000,
"lastSeen": 1483545006000,
"typename": "dnsserver"
},
"time": 1483551789000
}
]
}
Run Code Online (Sandbox Code Playgroud)
使用 Jolt 我需要将其转换为以下内容:
{
"event_id" : 123, ( pbid )
"name" : "myname", ( name )
"did": "20", ( triggeredComponents[0].device.did )
"first_seen": 1427474095000, ( triggeredComponents[0].device.firstSeen )
"last_seen": 1483545006000 ( triggeredComponents[0].device.lastSeen )
}
Run Code Online (Sandbox Code Playgroud)
我对基本的转变(event_id和name)没问题,但我不知道如何从数组中提取。这是我目前的尝试(我也尝试过其他一些方法):
[
{ …Run Code Online (Sandbox Code Playgroud) 如果我有一个简单的Utility函数将数组复制到一个新数组:
public static object[] CopyTo(object[] original, int startIndex, int endIndex)
{
List<object> copied - new List<object>();
for (int i = startIndex; i <= endIndex; i++)
{
copied.Add(original[i]);
}
return copied.ToArray();
}
Run Code Online (Sandbox Code Playgroud)
然后我希望能够像这样调用它:
int[] newThing = CopyTo(new int[] { 10, 9, 8, 7, 6 }, 2, 4);
Run Code Online (Sandbox Code Playgroud)
编译错误说cannot convert from int[] to object[].这是预期的,因为我的CopyTo函数特别想要一个对象数组,而不是一个整数数组.
如何更改CopyTo的声明以使其动态接受并返回任何类型的数组? 我相信泛型是这样的(尽管我对此并不太熟悉)所以我尝试过:
public static T[] CopyTo(T[] original, int startIndex......)
Run Code Online (Sandbox Code Playgroud)
但编译器不会将T识别为类型.
我正在查看我正在开发的网站的性能,我遇到了一些我写的代码:
foreach (WorkItem wi in p.getWorkItems(dateFrom, dateTo))
{
someFunction(wi);
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,p.getWorkItems每次循环执行时该方法都会运行吗?或者它执行一次,将结果对象保存在内存中,只是将指针递增到它正在使用的对象?原因是getWorkItems在幕后做了大量的事情(比较,排序,其他查询),所以最好不要一遍又一遍地执行.如果是这样,那么我最好这样做,如下所示:
List<WorkItem> workload = p.getWorkItems(dateFrom, dateTo);
for (int i = 0; i < workload.Count; i++)
{
someFunction(workload[i]);
}
Run Code Online (Sandbox Code Playgroud)
它是用C#编写的,但我假设答案适用于大多数类似的语言.
c# ×4
performance ×2
arrays ×1
asp.net ×1
generics ×1
html ×1
jolt ×1
json ×1
loops ×1
optimization ×1
soap ×1
svcutil.exe ×1
types ×1
wcf ×1
wsdl ×1