1

私たちは、ASP.NET Web 開発者 1 名と ColdFusion 開発者 1 名の小さなチームです。私たちのどちらも、相手の環境を知りません。Visual Studio 2005 を使用して ASMX Web サービスを作成し、Visual Studio 2008 で Web サービスを正常に使用する Web アプリケーション プロジェクトを作成しました。しかし、現在、ColdFusion の同僚に Web サービスを使用させようとしており、解釈できない結果が得られています (ただし、ターゲットの Web サービスに到達していなくても、ColdFusion が使用する「システム レイヤー」に障害が発生していると推測されます)。

編集 - 更新: 2009 年 6 月 2 日:

CF 開発者が見たエラー メッセージの一番上の部分:

"Could not generate stub objects for web service invocation"

CF クライアントから見たスタック トレースは次のとおりです。

org.xml.sax.SAXException: Fatal Error: URI=null Line=11: The element type "META" must be terminated by the matching end-tag "</META>".
    at org.apache.axis.utils.XMLUtils$ParserErrorHandler.fatalError(XMLUtils.java:723)
    at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.XMLScanner.reportFatalError(Unknown Source)
    at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
    at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
    at org.apache.axis.utils.XMLUtils.newDocument(XMLUtils.java:369)
    at org.apache.axis.utils.XMLUtils.newDocument(XMLUtils.java:388)
    at coldfusion.xml.rpc.XmlRpcServiceImpl.retrieveWSDL(XmlRpcServiceImpl.java:647)
    at coldfusion.xml.rpc.XmlRpcServiceImpl.access$000(XmlRpcServiceImpl.java:51)
    at coldfusion.xml.rpc.XmlRpcServiceImpl$1.run(XmlRpcServiceImpl.java:208)
    at java.security.AccessController.doPrivileged(Native Method)
    at coldfusion.xml.rpc.XmlRpcServiceImpl.registerWebService(XmlRpcServiceImpl.java:201)
    at coldfusion.xml.rpc.XmlRpcServiceImpl.getWebService(XmlRpcServiceImpl.java:475)
    at coldfusion.xml.rpc.XmlRpcServiceImpl.getWebServiceProxy(XmlRpcServiceImpl.java:430)
    at coldfusion.tagext.lang.InvokeTag.doEndTag(InvokeTag.java:381)
    at cfuploadfileSimple2ecfm1056043715.runPage(D:\AMTSTEST\webservice\uploadfileSimple.cfm:68)
    at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:152)
    at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:349)
    at coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:65)
    at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:225)
    at coldfusion.filter.PathFilter.invoke(PathFilter.java:86)
    at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:69)
    at coldfusion.filter.BrowserDebugFilter.invoke(BrowserDebugFilter.java:52)
    at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28)
    at coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38)
    at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38)
    at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22)
    at coldfusion.filter.RequestThrottleFilter.invoke(RequestThrottleFilter.java:115)
    at coldfusion.CfmServlet.service(CfmServlet.java:107)
    at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:78)
    at jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:91)
    at jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42)
    at jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:257)
    at jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:541)
    at jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:204)
    at jrunx.scheduler.ThreadPool$DownstreamMetrics.invokeRunnable(ThreadPool.java:318)
    at jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:426)
    at jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:264)
    at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)

呼び出そうとしている webmethod のシグネチャは次のとおりです。

[WebMethod]
    public string UploadFileBasic(string trimURL
        , byte[] incomingArray
        , string FileName
        , string TrimRecordTypeName)

どのように進めればよいか、私たちはかなり混乱しています。明日、CF ソース コードが役立つ場合は投稿できますが、私が見た限りでは非常に単純であり、ユニット テストのこの時点では、サービスの CF 呼び出しのほとんどの引数は定数 (文字列) です。

適切な CF フォーラムのヘルプや提案をいただければ幸いです。ありがとう。

編集-更新 2009 年 6 月 2 日:

CFML コードは次のとおりです。

<!--- read test.txt file into a binary variable --->
<cffile action="readBinary"   file="#FileName#" variable="objBinaryData">
<!--- convert the binary variable to Base64 --->  
<cfset b64file = #toBase64(objBinaryData)#>
<!--- invoke .net web service --->
<cfinvoke webservice =  "http://trim/trimbroker/fileservice.asmx?wsdl" 
          method = "UploadFileBasic"      
          returnVariable = "recordNumber">
    <cfinvokeargument name="trimURL" value="trim/trimWSdev/trim.asmx" />
    <cfinvokeargument name="incomingArray" value="#b64file#" />
    <cfinvokeargument name="FileName" value="#form.FILENAME#" />
    <cfinvokeargument name="TrimRecordTypeName" value="Document" />
</cfinvoke>

動作させるために、これをかなり単純化したことに注意してください。上記の引数 1 と 4 は単なる文字列定数です。引数 2 は、.Net が期待するバイト配列に対する試みです。私たちは、.Net Web サービスによって拒否されていないと信じています。むしろ、スタック トレースから、メッセージがネットワーク経由で送信される前に SAX 例外に陥っているように見えます。.Net Web サービスは、それが実行されているサーバーのアプリケーション ログまたはシステム ログに何も記録しません。

ColdFusion のリリースは、ColdFusion MX 7 です。

編集 - 2009 年 6 月 4 日:

この問題の修正は、別のより専門的なフォーラムを通じて明らかになりました。

http://forums.adobe.com/message/2009491#2009491

要するに、CF MX 7 は、IIS で「統合 Windows 認証」を使用してターゲット Web サービスが構成されている場合 (エラー メッセージには手掛かりがありません)、惨めに失敗します (私たちの Web サービスはそのようなものであり、そうする必要があります)。より多くの研究がこれにつながりました:

http://blog.tagworldwide.com/?p=16

私たちはまだこれを追い求めており、完全に実行可能な解決策を得ようとしています. つまり、ColdFusion の「管理者」は、Windows 認証を必要とする .Net Web サービスに接続できる「生成された Java スタブ」を取得するために、何らかの「特別な設定」を行う必要があります。

4

3 に答える 3

3

要素タイプ「META」は、一致する終了タグ「</META >」で終了する必要があります。

このエラーメッセージにより、ColdFusionがXMLパーサーを使用してHTMLドキュメントを解析しようとしているのではないかと思われます。推測しなければならないのは、おそらくASP.NETの「死の黄色い画面」を解析しようとしていることだと思います。CFからの不正な要求が、.NET側でエラーを引き起こしていると思われます。具体的に何に反対されているかについての手がかりを得るために、.NET側でエラーログを確認する必要があります。

編集:「死の黄色い画面」とは、標準のASP.NETエラーページを参照しているだけです。このページには、黄色の背景にエラーメッセージとスタックトレースが表示されます。

あなたの更新に応じて、私はチェックするいくつかの可能性を考えることができます:

  1. スタックトレースと投稿した2番目のエラーメッセージは、CFがWSDLをダウンロードおよび解析してプロキシオブジェクトを作成しているときに、実際にメソッドを呼び出す前に問題が発生していることを示しているようです。「 http://trim/trimbroker/fileservice.asmx?wsdl 」をWebブラウザーに貼り付けると、WSDLまたはHTMLが取得されますか?おそらく、ログインページなどにリダイレクトされますか?ブラウザでWSDLXMLドキュメントを取得しない場合、CFもそれを取得できません。

  2. CFコードは、バイト配列を期待するパラメーターにbase-64文字列を渡します。CF Webサービススタックは、base-64文字列をバイト配列に変換するのに十分スマートですか?びっくりするかもしれませんが、多分。CFでバイト配列を作成できますか?前回CFを使ったのはできませんでしたが、それはずっと前のことです。base-64に変換せずにobjBinaryDataをincomingArrayパラメーターに直接渡してみることができますが、それが機能しない場合は、.NET側のincomingArrayのタイプをstringに変更し、内部でConvert.FromBase64String()を呼び出すのが最も簡単な場合があります。メソッド。

于 2009-06-01T22:27:21.767 に答える
0

CFML は便利です。また、使用している CF のバージョンを教えてください。以前のバージョンの CF では、Web サービスにオーバーロードされたメソッドがあった場合に問題があったことを知っています。これが最新バージョンの問題かどうかはわかりません。

于 2009-06-01T22:17:53.907 に答える
0

CFサービスがローカルシステムで実行されており、wsdlにアクセスできなかったため、同じ問題が発生したため、ASP.Netは無許可のアクセスを返しました。

cfhttp を使用して wsdl を取得し、cfhttp.fileContent が何であるかを確認してみてください。同じ問題が発生する可能性があります。

于 2010-01-13T01:57:22.790 に答える