在Java中使用WCF服务不会生成接口

时间:2016-04-25 10:27:35

标签: java web-services wcf

我们有一个非常大的WCF服务,我们使用了很长一段时间,但到目前为止我们只通过c#连接到它。现在我们需要从Java连接它。 我很快发现,如果我使用Eclipse并转到new / other / Web Service Client,我可以将WSDL链接放在那里以自动生成代码。 直接做到这一点并没有产生太多。我获得了两个文件,其中一个文件是空的。 这是我使用这个自动生成工具的第一个问题 - 它创建了一些东西,但我没有看到任何成功的记录和创建失败的记录。 我搜索并发现我必须将绑定更改为basicHttpBinding,并确保httpGetEnabled设置为“true”。在此更改之后,Java中的自动生成会生成大量代码,我会获得数据合约模式等等。我在“org.tempuri”命名空间下获得了4个文件:

BasicHttpBinding_IMyServiceStub.java

IMyServiceProxy.java

MyService.java

MyServiceLocator.java

然而,看一些教程,似乎我应该得到第五个,IMyService.java - 我没有得到。并且,我确实在生成的代码中有错误,指出IMyService确实无法解析,因为它在一些地方使用,但它的定义不是自动生成的。 由于我没有自动生成过程中失败的日志,我有点失去了作为罪魁祸首的东西。 有没有人有任何经验:

  

a)找到自动生成的日志,告诉我发生了什么   错
  b)直接知道导致Interface类不生成的原因是什么?

我怀疑我必须在服务器上的webconfig文件中更改更多内容。第二个猜测是,也许我们使用一些c#构造不被java识别......或者其他东西。 无论如何,完全失去了这里,因为没有对错误的反馈。

这是IIS服务器的webconfig文件。

<?xml version="1.0"?>
<configuration>
  <connectionStrings>
    <add name="XXX" connectionString="XXX" providerName="System.Data.SqlClient"/>
  </connectionStrings>
  <system.web>
    <compilation targetFramework="4.0"/>
    <customErrors mode="Off"/>
    <httpRuntime executionTimeout="5400" requestValidationMode="2.0"/>
    <identity impersonate="false"/>
  </system.web>
  <system.serviceModel>
    <bindings>
      <customBinding>
        <binding name="bindingNetTcp" closeTimeout="01:00:00" openTimeout="01:00:00" receiveTimeout="01:00:00" sendTimeout="01:00:00">
          <binaryMessageEncoding maxSessionSize="2147483647">
            <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
          </binaryMessageEncoding>
          <tcpTransport maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647"/>
        </binding>
        <binding name="bindingHttps" closeTimeout="01:00:00" openTimeout="01:00:00" receiveTimeout="01:00:00" sendTimeout="01:00:00">
          <binaryMessageEncoding maxReadPoolSize="2147483647" maxWritePoolSize="2147483647" maxSessionSize="2147483647">
            <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
          </binaryMessageEncoding>
          <httpsTransport manualAddressing="false" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" allowCookies="true" authenticationScheme="Anonymous" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" keepAliveEnabled="true" maxBufferSize="2147483647" proxyAuthenticationScheme="Anonymous" realm="" transferMode="StreamedResponse" unsafeConnectionNtlmAuthentication="false" useDefaultWebProxy="true"/>
        </binding>
        <binding name="bindingHttp" closeTimeout="01:00:00" openTimeout="01:00:00" receiveTimeout="01:00:00" sendTimeout="01:00:00">
          <binaryMessageEncoding maxReadPoolSize="2147483647" maxWritePoolSize="2147483647" maxSessionSize="2147483647">
            <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
          </binaryMessageEncoding>
          <httpTransport manualAddressing="false" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" allowCookies="true" authenticationScheme="Anonymous" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" keepAliveEnabled="true" maxBufferSize="2147483647" proxyAuthenticationScheme="Anonymous" realm="" transferMode="StreamedResponse" unsafeConnectionNtlmAuthentication="false" useDefaultWebProxy="true"/>
        </binding>
      </customBinding>
      <netTcpBinding>
        <binding name="NetTcpBinding_IGodService" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10" maxReceivedMessageSize="65536">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
          <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/>
          <security mode="Transport">
            <transport clientCredentialType="Certificate" protectionLevel="EncryptAndSign"/>
            <message clientCredentialType="Windows"/>
          </security>
        </binding>
        <binding name="NetTcpBinding_IGodService1" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10" maxReceivedMessageSize="65536">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
          <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/>
          <security mode="Transport">
            <transport clientCredentialType="Certificate" protectionLevel="EncryptAndSign"/>
            <message clientCredentialType="Windows"/>
          </security>
        </binding>
        <binding name="CustomBinding_IDQMServer">
          <security mode="None"/>
        </binding>
      </netTcpBinding>
    </bindings>
    <services>
      <service name="XXX.XXX" behaviorConfiguration="XXXBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://example.com:4502/xxx/xxx/"/>
            <add baseAddress="http://example.com/xxx/xxx/"/>
          </baseAddresses>
        </host>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        <endpoint address="" binding="customBinding" bindingConfiguration="bindingHttps" contract="xxx.Ixxx"/>
        <endpoint address="" binding="basicHttpBinding" contract="xxx.Ixxx"/>
        <endpoint address="" binding="customBinding" bindingConfiguration="bindingNetTcp" contract="xxx.Ixxx"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="xxxBehavior">
          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
          <serviceThrottling maxConcurrentCalls="2500" maxConcurrentInstances="2147483647" maxConcurrentSessions="2147483647"/>
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="SrvBehavior">
          <clientCredentials>
            <clientCertificate findValue="xxx" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName"/>
            <serviceCertificate>
              <authentication certificateValidationMode="PeerTrust"/>
            </serviceCertificate>
          </clientCredentials>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <defaultDocument>
      <files>
        <add value="xxx.svc"/>
      </files>
    </defaultDocument>
  </system.webServer>
</configuration>

请注意我在那里使用basicHttpBinding,以前它是像https一样的“bindingHttp”,但它根本没用。

编辑:正如评论部分所指出的,我们在服务中使用了很多列表,这是c#wcf接口的一个例子:

public class ListResults<T>//our own custom return class
{
    public List<T> Result { get; set; }

    public long? ID { get; set; }

    public int? Error { get; set; }
}

[SecurityOperationBehavior]
[OperationContract]
ListResults<SomeDataType> SomeListFunction(string param1, long? param2, bool? param3);

0 个答案:

没有答案