iT邦幫忙

1

C# Web Service 撰寫與被連接疑問

各位大家好,
小弟受命寫一支 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 的經驗,
麻煩大家解惑,謝謝!

更#編譯失敗訊息
https://ithelp.ithome.com.tw/upload/images/20200226/20114041XJl5GJZmsL.jpg

我自己執行的時候可能是環境沒設好,
一直出現 error could not create the java virtual machine 的錯誤訊息。

額外補充
爬文得知 12 是 Soap1.2 版,但好奇這樣同時存在會對我上述問題有影響嗎?
我建置的時候都沒動什麼相關設定,就一路寫過來…用 SoapUI 才發現有兩種。
https://ithelp.ithome.com.tw/upload/images/20200226/2011404107ZdPP7wNQ.jpg

看更多先前的討論...收起先前的討論...
fillano iT邦超人 1 級 ‧ 2020-02-26 10:00:03 檢舉
編譯失敗的錯誤訊息?如果問題是編譯出錯的話,參考這個資訊會比較有用。
yorklin iT邦新手 5 級 ‧ 2020-02-26 10:08:22 檢舉
更新廠商提供的錯誤圖片
fillano iT邦超人 1 級 ‧ 2020-02-26 11:58:43 檢舉
看錯誤訊息,是程式找不到他用的套件之類,這問題跟你無關吧,是他執行wsdl2java的設定問題。你確定classpath是對的?
yorklin iT邦新手 5 級 ‧ 2020-02-27 09:28:21 檢舉
廠商目前改嘗試不同方法中,所以我也不太確定原本使用的設定是什麼…等待回應中
untitled iT邦新手 5 級 ‧ 2020-02-27 09:36:44 檢舉
webconfig 一般我會拿來放sqlconnstring 要切換DB的時候不用再更換程式
fillano iT邦超人 1 級 ‧ 2020-02-27 09:49:23 檢舉
wsdl2java是架構在axis上的,然後錯誤訊息是org.apache.axis...相關的cannot find symbol(也就是說編譯時找不到axis),那問題很明顯。如果廠商跟你抱怨這個錯誤,我很懷疑他的專業XD
yorklin iT邦新手 5 級 ‧ 2020-03-02 09:24:15 檢舉
畢業後很久沒碰 java,也沒用過 java 許多工具…不太知道問題點XD
廠商可能也很忙,弄到昏掉了(?) 不過目前還沒後續消息,先選最佳解了。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
Luke
iT邦研究生 5 級 ‧ 2020-02-26 15:40:06
最佳解答

1.Java 連 C# 的 Web Service 有什麼特別要注意的?
2.Web Service 中的 Web.config 是否有什麼要特別設定的?
3.廠商用有用 SoapUI 能順利連過來並使用,是否代表 Server 端是沒問題的?

SoapUI ,表示OK 沒有問題。
【web service 要提供給廠商介接】
內網、外網??/images/emoticon/emoticon06.gif

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 ...沒有關係

yorklin iT邦新手 5 級 ‧ 2020-02-27 09:43:56 檢舉

C# 部分我沒寫 endpoint 相關的東西…當初寫的時候只搜個 C# Web Service,好像也沒人講到這塊,我來研究一下,感謝!

yorklin iT邦新手 5 級 ‧ 2020-03-02 09:26:24 檢舉

研究了一下,感覺是 WCF 才需要設定 endpoint (理解有錯再麻煩告知一下…)
至少就我爬到的案例只用設定 namespace,不過目前沒後續消息,先當作解決了XD

2

不負責任的猜測

正常這一類的東西,看你提供的是xml格式的情況。
正常web server只要能讀到就行了才對。
倒也不太需要特別的設定才對。
但我對wsdl並不是很明白,不太懂是否需要做到重新編譯的事。

但從你說直接給wsdl檔也會編譯失敗的情況下。
因該還是要從其wsdl編碼的設定下手。
我倒認為可能跟web server比較無直接關係才對。(我猜的)

yorklin iT邦新手 5 級 ‧ 2020-02-26 10:17:11 檢舉

我也不太確定…因為url?wsdl 就會產生了,所以我就直接另存這個提供給廠商測。
我有在想是不是 Java 連 C# 撰寫的 Web Service 會有問題,但又想到 wsdl 這個規範應該都是要一致的才對…找不到問題只能發問/images/emoticon/emoticon02.gif

看到你新更新的問題,雖然覺得不太可能。
但還是弱弱的問了一下。
java套件有安裝更新嘛?

yorklin iT邦新手 5 級 ‧ 2020-02-26 11:36:20 檢舉

截圖的部分是廠商提供的,所以對方我不太清楚…

我自己報錯的JAVA環境都確定是新的
jdk13.0.2 (為了測試也載了 11.0.6 結果一樣)
jre1.8.0_241

3
海綿寶寶
iT邦大神 1 級 ‧ 2020-02-26 10:04:00

3.廠商用有用 SoapUI 能順利連過來並使用,是否代表 Server 端是沒問題的?

1.是的, Server 端沒問題
2.不是你的問題,是廠商的問題
3.收工放飯

/images/emoticon/emoticon71.gif

補充說明:
在 WebSerivce 的世界中,你的部份已經完成了
如果要完整一點
可以用Apache WSDL validator去檢查你的 WSDL 檔案是否正確
如果正確,就不關你的事了
如果有錯,你再去修正 WSDL 即可

以我不負責任的網友的看法
WSDL2Java 以及其產生的錯誤
完全不關你的事

yorklin iT邦新手 5 級 ‧ 2020-02-26 10:18:10 檢舉

感謝,我來試一下…

0
tw70126_tw
iT邦新手 5 級 ‧ 2020-02-27 09:37:20

SoapHttpClientProtocol.SoapVersion可以指定SOAP版本,改低點給廠商試試XD

yorklin iT邦新手 5 級 ‧ 2020-03-02 09:22:57 檢舉

我有爬文爬到 SoapUI 能轉出相關檔案的樣子,提供這個方法給廠商後就沒後續消息了,大概是可以了(?)
(現在問的是其他問題了XD)

我要發表回答

立即登入回答