各位大家好,
小弟受命寫一支 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