0

我正在寻找可以由 ASP.NET MVC 控制器或彼此使用的两个 WCF 服务。

本质上,该服务将生成一个 (XML) DataContract,可以由另一个服务使用。

A. OutputService1 将输出一个对象,InputService2 将其作为输入并保存。在这种情况下,用户将例如单击 MVC 应用程序中的链接以强制消息传输。

或者

B. OutputService1 会将输出提供给 ASP.NET MVC 控制器,然后该控制器会将其放入文件中并提供给用户进行保存。然后,用户可以在不久的将来通过 MVC 应用程序将其上传到 InputService2。

到目前为止,我有两个服务和 .NET MVC 应用程序。我已经测试了几个场景,但我对结果不太满意。

这是我如何能够通过发送对象。View 中的输入表单然后通过控制器传递给支持 REST 的 WCF。OutputService1 的输出包括<?xml version="1.0"?>使用 REST 时。InputService2 将只接受没有第一行的 XML 的其余部分。

REST WCF 服务类似于此示例:http ://forums.asp.net/t/1830710.aspx/1

输入输出服务.cs

[OperationContract]
[WebInvoke(Method = "POST",
    ResponseFormat = WebMessageFormat.Xml,
    UriTemplate = "Input")]
ServiceRequestStatus Input(MyDataContract mdc);

网络配置

  <service name="myns.InputOutputService">
    <endpoint address="/" binding="webHttpBinding" name="InputOutputEndPoint"
      contract="myns.IInputOutputService" behaviorConfiguration="restBehavior" />
    <endpoint address="mex" binding="mexHttpBinding" name="MetaDataExchangeEndpoint"
      contract="IMetadataExchange" />
  </service>
...
<endpointBehaviors>
  <behavior name="restBehavior">
    <webHttp helpEnabled="true" automaticFormatSelectionEnabled="true" />
  </behavior>
</endpointBehaviors>

.NET MVC 部分与此示例类似:Passing object with WCF RESTful

MVC MyView.cshtml

<form method="post" action='@Url.Action("TestWCFRest")'>
    <textarea name="xml" id="WCFTestData" rows="10" cols="50">        
        <?xml version="1.0"?>
        <MyDataContract xmlns="myns" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
            <item1>100</item1><item2>0.5</item2>
        </MyDataContract>
    </textarea>
    <br />        
    <input id="Url" name="Url" type="text" value="http://localhost/ProjectName/WCFTestService.svc/Input" size="80" />
    <input type="submit" value="Test WCF input"/>
</form>

.NET MVC MyController.cs

    // Added to avoid validating the XML 
    [ValidateInput(false)]
    public ActionResult TestWCFRest(string xml, string url)
    {

        byte[] reqData = Encoding.UTF8.GetBytes(xml);

        HttpWebRequest req = WebRequest.Create(url) as HttpWebRequest;
        req.Method = "POST";
        req.ContentType = " application/xml";
        req.ContentLength = xml.Length;
        req.Proxy = null;
        Stream reqStream = req.GetRequestStream();
        reqStream.Write(reqData, 0, reqData.Length);

        HttpWebResponse resp = req.GetResponse() as HttpWebResponse;
        string code = resp.StatusCode.ToString();
        return Content(code);
    }

如果我尝试将 ServiceReference 添加到 WCF 服务,并将 XML 转换为 MVC 内的数据合同,这是可能的还是一个坏主意?

    public ActionResult TestWCFRest(string xml, string url)
    {
        InputOutputServiceClient iosc = new InputOutputServiceClient();
        // Need to convert the XML to MyDataContract
        ...?
        iosc.Input(myDataContractObj);
    }

我应该使用 REST 而不是 SOAP 吗?我尝试通过 SOAP 从 OutputService1 输出 DataContract 类,然后使用手动将其发送到 InputService2,HttpWebRequest and HttpWebResponse但没有让它工作(还)。用户获得的文件不一定需要是人类可读的,但如果这很重要,服务可能会在某个时候向外部客户端开放。

有没有更好的方法来使用 .NET MVC 和 WCF 服务?主旨是两个服务 InputService 和 OutputService 需要通过 MVC 中的 User 命令时直接相互通信,并且能够将输出直接输出给用户(XML 文件),并将同一个文件作为输入。

基本上,这种方法在输出的 XML 中的额外行之外有效。但是,有没有更好的方法,是否应该将 XML 转换为 DataContract 对象并传递给用户?OutputService 应该最好输出 SOAP 还是 REST XML?HttpWebRequest and HttpWebResponse用于将数据发送到服务似乎有点尴尬。

4

0 回答 0