WCF를 처음 사용하고 주문 객체 (XML 파일에서 일련의 문자열)를 받아서 데이터를 데이터베이스에 삽입 한 다음 주문 객체를 반환하는 간단한 REST 서비스를 만들었습니다. 결과가 포함되어 있습니다. 서비스를 테스트하기 위해 작은 웹 프로젝트를 만들고 xml 문서에서 만든 스트림을 보내십시오.WCF 웹 서비스 데이터 멤버 기본값 null null
문제는 XML 문서의 모든 항목이 스트림에 배치 되더라도 서비스에서 데이터를받을 때 일부 서비스가 무효화된다는 것입니다. 예를 들어 lineItemId에는 값이 있지만 배송 상태는 null로 표시됩니다. XML 생성을 단계별로 진행하고 모든 값이 전송되는지 확인합니다. 그러나 datamembers를 지우고 주위의 이름을 변경하면 작동 할 수 있습니다. 어떤 도움을 주시면 감사하겠습니다. 있는 Web.Config
에서string lineId = txtLineItem.Text.Trim();
string status = txtDeliveryStatus.Text.Trim();
string TrackingNumber = "1x22-z4r32";
string theMethod = "Ground";
string carrier = "UPS";
string ShipmentDate = "04/27/2010";
XNamespace nsOrders = "http://tempuri.org/order";
XElement myDoc =
new XElement(nsOrders + "Order",
new XElement(nsOrders + "lineItemId", lineId),
new XElement(nsOrders + "shipmentStatus", status),
new XElement(nsOrders + "trackingNumber", TrackingNumber),
new XElement(nsOrders + "delvryMethod", theMethod),
new XElement(nsOrders + "shipmentCarrier", carrier),
new XElement(nsOrders + "shipmentDate", ShipmentDate)
);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:3587/Deposco.svc/wms/Orders/UpdateOrderStatus/");
request.Method = "POST";
request.ContentType = "application/xml";
try
{
request.ContentLength = myDoc.ToString().Length;
StreamWriter sw = new StreamWriter(request.GetRequestStream());
sw.Write(myDoc);
sw.Close();
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
StreamReader reader = new StreamReader(response.GetResponseStream());
string responseString = reader.ReadToEnd();
XDocument.Parse(responseString).Save(@"c:\DeposcoSvcWCF.xml");
}
}
catch (WebException wEx)
{
Stream errorStream = ((HttpWebResponse)wEx.Response).GetResponseStream();
string errorMsg = new StreamReader(errorStream).ReadToEnd();
}
바인딩
<system.serviceModel>
<services>
<service behaviorConfiguration="DesposcoService.ShippingServiceBehavior" name="DesposcoService.ShippingService">
<endpoint address="wms" binding="webHttpBinding" contract="DesposcoService.IShipping" behaviorConfiguration="REST" bindingNamespace="http://companyname.com/wms">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="DesposcoService.ShippingServiceBehavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="REST">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
실제로 서비스 계약 및 데이터 계약에 대해 정의 된 네임 스페이스가 있습니다. 그들에게는 회사 정보가있어 게시를 위해 회사 정보를 삭제했습니다.그들을 모두 제거한 후에, 나는 서버에서 각각의 트라이밍을 시도하고 복종시키는 나쁜 요청을받습니다. – James
@James : 질문에 필요한 정보 (익명 처리)를 포함시킬 수 있습니까? 또한 사용중인 바인딩/구성을 게시하십시오. 완벽하게 재현 할 수없는 경우 진단하기가 어렵습니다. – Aaronaught
물론, 질문을 편집하기 위해 어디로 가야할지 생각해 보면 추가 할 것입니다. 오버플로 스택이 새로 생겼습니다. – James