통합 테스트 목적으로 잘 알려진 웹 서비스 및 Wcf 서비스를 가장하려고합니다. 이를 위해 자체 호스팅 환경에서 서비스 메타 데이터를 캡처하고 서비스 스텁을 자동 생성하며 서비스 스텁을 호스트하고자합니다.WCF 끝점에 ASMX 웹 서비스 메타 데이터 가져 오기
this article here에 이어 원격 Wcf 서비스 메타 데이터를 가져 와서 계약을 생성 할 수 있습니다. 그러나 원격 Asmx 웹 서비스에서 동일한 작업을 수행하는 데 어려움을 겪고 있습니다.
저는 이것을 조사하기위한 일련의 미키 마우스 솔루션을 보유하고 있습니다.
내 ASMX 솔루션 내 WCF 솔루션은 또한 마지막으로
[ServiceContract]
public interface ISimpleWcfService
{
[OperationContract]
string GetData(int value);
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);
}
[DataContract]
public class CompositeType
{
[DataMember]
public bool BoolValue { get; set; }
[DataMember]
public string StringValue { get; set; }
}
public class SimpleWcfService : ISimpleWcfService
{
public string GetData(int value)
{
return string.Format("You entered: {0}", value);
}
public CompositeType GetDataUsingDataContract(CompositeType composite)
{
if (composite.BoolValue)
{
composite.StringValue += "Suffix";
}
return composite;
}
}
아래에있는 기본 "안녕하세요"서비스를 포함
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class SimpleAsmxService : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld() { return "Hello World"; }
}
아래에있는 기본에 "Hello World"웹 서비스를 포함, 작은 콘솔 그 모양은
class Program
{
public const string UrlWcf =
"http://localhost:8731/Design_Time_Addresses/SimpleWcfService/mex";
public const string UrlAsmx =
"http://localhost:1803/SimpleAsmxService.asmx?WSDL";
static void Main(string[] args)
{
EndpointAddress mexAddress = new EndpointAddress (UrlWcf);
MetadataExchangeClient mexClient =
new MetadataExchangeClient (mexAddress);
mexClient.ResolveMetadataReferences = true;
// NOTE: blows up if we use UrlAsmx
MetadataSet metaSet = mexClient.GetMetadata();
WsdlImporter importer = new WsdlImporter (metaSet);
Collection<ContractDescription> contracts =
importer.ImportAllContracts();
}
}
와 같을 수있다. 내가 할 수 있어야한다. 잘 알려진 Asmx 웹 서비스에서 Wsdl을 가져오고 계약을 생성하고 계약을 코드로 작성하지만 앞의 샘플을 그렇게 할 수는 없습니다. 어떤 도움을 많이 주시면 감사하겠습니다.
Thanks!
NOTE 'http://localhost:1803/SimpleAsmxService.asmx?WSDL'
을 A의 :
메타 데이터의 메시지와 함께
입니다.System.InvalidOperationException
는 해결할 수없는 참조를 포함 상기MetadataSet metaSet = mexClient.GetMetadata();
를 호출 한 경우에 발생하는 에러가System.InvalidOperationException
메시지가있는 내부 예외는<?xml version="1.0" encoding="utf-16"?> <Fault xmlns="http://www.w3.org/2003/05/soap-envelope"> <Code> <Value>Sender</Value> </Code> <Reason> <Text xml:lang="en"> System.Web.Services.Protocols.SoapException: Unable to handle request without a valid action parameter. Please supply a valid soap action. at System.Web.Services.Protocols.Soap12ServerProtocolHelper.RouteRequest() at System.Web.Services.Protocols.SoapServerProtocol.RouteRequest(SoapServerMessage message) at System.Web.Services.Protocols.SoapServerProtocol.Initialize() at System.Web.Services.Protocols.ServerProtocol.SetContext(Type type, HttpContext context, HttpRequest request, HttpResponse response) at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing) </Text> </Reason> </Fault>
@ johnny - 오신 것을 환영합니다. ... 오 소년! 내 첫 현상금! – Filburt