各位大家好,
小弟受命寫一支 web service 要提供給廠商介接,
一路開發過來,
不管是撰寫、上IIS部屬、外網用網站的模式測試到目前都沒什麼問題,
但是廠商方面目前不管是拿了我給的 wsdl 檔或是直接用 url 的方法都說編譯失敗…(他們用 WSDL2Java編譯失敗)
所以想問一下
1.Java 連 C# 的 Web Service 有什麼特別要注意的?
2.Web Service 中的 Web.config 是否有什麼要特別設定的?
3.廠商用有用 SoapUI 能順利連過來並使用,是否代表 Server 端是沒問題的?
WSDL 檔案有點長,只先附上上層 (真實domain name被我取代)。
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions 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:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="https://yorklinforithome/Taipei/UploadPR.asmx" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" targetNamespace="https://yorklinforithome/Taipei/UploadPR.asmx" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
  <wsdl:types>
    <s:schema elementFormDefault="qualified" targetNamespace="https://yorklinforithome/Taipei/UploadPR.asmx">
Web Config,除了 rewrite 外,基本上我也沒什麼多設定…
<?xml version="1.0"?>
<!--
  如需如何設定 ASP.NET 應用程式的詳細資訊,請造訪
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <system.web>
    <!--<customErrors mode="RemoteOnly"/>-->
    <webServices>
      <protocols>
        <add name="HttpGet"/>
        <add name="HttpPost"/>
      </protocols>
    </webServices>
    <compilation targetFramework="4.5.2" debug="true"/>
    <httpRuntime targetFramework="4.5.2" requestValidationMode="2.0"/>
    <httpModules>
      <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web"/>
    </httpModules>
  </system.web>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Redirect to https" stopProcessing="true">
          <match url="(.*)"/>
          <conditions>
            <add input="{HTTPS}" pattern="^OFF$"/>
            <add input="{HTTPS_HOST}" pattern="^(localhost)" negate="true"/>
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/Taipei/{R:1}" redirectType="SeeOther"/>
        </rule>
      </rules>
    </rewrite>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules>
      <remove name="ApplicationInsightsWebTracking"/>
      <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" preCondition="managedHandler"/>
    </modules>
    <defaultDocument>
      <files>
        <clear/>
        <add value="Default.htm"/>
        <add value="Default.asp"/>
        <add value="index.htm"/>
        <add value="index.html"/>
        <add value="iisstart.htm"/>
        <add value="default.aspx"/>
      </files>
    </defaultDocument>
  </system.webServer>
  <system.codedom>
    <!--<compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+"/>
    </compilers>-->
  </system.codedom>
</configuration>
<!--ProjectGuid: {264C900C-C8C1-42C5-BF07-A4C3F4EED832}-->
同仁也都沒開發過 Web Service 的經驗,
麻煩大家解惑,謝謝!
更#編譯失敗訊息
我自己執行的時候可能是環境沒設好,
一直出現 error could not create the java virtual machine 的錯誤訊息。
額外補充
爬文得知 12 是 Soap1.2 版,但好奇這樣同時存在會對我上述問題有影響嗎?
我建置的時候都沒動什麼相關設定,就一路寫過來…用 SoapUI 才發現有兩種。
1.Java 連 C# 的 Web Service 有什麼特別要注意的?
2.Web Service 中的 Web.config 是否有什麼要特別設定的?
3.廠商用有用 SoapUI 能順利連過來並使用,是否代表 Server 端是沒問題的?
SoapUI ,表示OK 沒有問題。
【web service 要提供給廠商介接】
內網、外網??
C# 寫法,Endpoint.Address 要換成對應的IP
        public static PDAServiceSoap PDAService()
        {
            //http://192.168.*.**:8090/service/pdaservice.asmx?WSDL
            var service = new PDAService.PDAServiceSoapClient();
            var address = service.Endpoint.Address;
            string strUri = string.Format("http://{0}{1}",  略, address.Uri.AbsolutePath);
            service.Endpoint.Address = new System.ServiceModel.EndpointAddress(strUri);
            return service;
        }
另一個URL timeout 封包大小 ,GOOGLE 查一下
看看 xxx.Config 設定 endpoint,maxBufferPoolSize ... 略,
不一一解釋了
    <bindings>
      <basicHttpBinding>
        <binding name="BaseService" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true" messageEncoding="Text" />
      </basicHttpBinding>
    </bindings>
    略
應該就這幾個問題
這用甚麼JAVA,C#,PHP ...沒有關係
不負責任的猜測
正常這一類的東西,看你提供的是xml格式的情況。
正常web server只要能讀到就行了才對。
倒也不太需要特別的設定才對。
但我對wsdl並不是很明白,不太懂是否需要做到重新編譯的事。
但從你說直接給wsdl檔也會編譯失敗的情況下。
因該還是要從其wsdl編碼的設定下手。
我倒認為可能跟web server比較無直接關係才對。(我猜的)
3.廠商用有用 SoapUI 能順利連過來並使用,是否代表 Server 端是沒問題的?
1.是的, Server 端沒問題
2.不是你的問題,是廠商的問題
3.收工放飯

補充說明:
在 WebSerivce 的世界中,你的部份已經完成了
如果要完整一點
可以用Apache WSDL validator去檢查你的 WSDL 檔案是否正確
如果正確,就不關你的事了
如果有錯,你再去修正 WSDL 即可
以我不負責任的網友的看法
WSDL2Java 以及其產生的錯誤
完全不關你的事
SoapHttpClientProtocol.SoapVersion可以指定SOAP版本,改低點給廠商試試XD