当前位置: 首页 > 知识库问答 >
问题:

向WCF服务发送字节数组

符畅
2023-03-14
public void SendImage(byte[] img, string filename)
{
    MemoryStream memoryStream = new MemoryStream(img);
    FileStream stream = new FileStream(AppDomain.CurrentDomain.BaseDirectory + filename, FileMode.Create);
    memoryStream.CopyTo(stream);
    stream.Close();
}

接口:

[OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "sendImage")]
void SendImage(byte[] img, string filename);

以下是我的web.config:

<?xml version="1.0"?>
<configuration>
    <system.diagnostics>
        <sources>
            <source name="System.ServiceModel"
                switchValue="Information, ActivityTracing"
                propagateActivity="true" >
                <listeners>
                    <add name="xml"/>
                </listeners>
            </source>
            <source name="System.ServiceModel.MessageLogging">
                <listeners>
                    <add name="xml"/>
                </listeners>
            </source>
            <source name="myUserTraceSource"
                switchValue="Information, ActivityTracing">
                <listeners>
                    <add name="xml"/>
                </listeners>
            </source>
        </sources>
        <sharedListeners>
            <add name="xml"
                type="System.Diagnostics.XmlWriterTraceListener"
                initializeData="Traces.svclog" />
        </sharedListeners>
    </system.diagnostics>
    <system.web>
        <compilation debug="true" targetFramework="4.0" />
    </system.web>
    <system.serviceModel>
        <diagnostics wmiProviderEnabled="true">
            <messageLogging
                logEntireMessage="true"
                logMalformedMessages="true"
                logMessagesAtServiceLevel="true"
                logMessagesAtTransportLevel="true"
                maxMessagesToLog="3000"
                />
        </diagnostics>
            <services>
                <service name="WcfService1.RestServiceImpl" behaviorConfiguration="ServiceBehaviour">
                    <endpoint address="" binding="basicHttpBinding" contract="WcfService1.IRestServiceImpl" behaviorConfiguration="web">

                    </endpoint>
                </service>
            </services>
            <bindings>
                <!-- 
                    Following is the expanded configuration section for a BasicHttpBinding.
                    Each property is configured with the default value.
                    See the TransportSecurity, and MessageSecurity samples in the
                    Basic directory to learn how to configure these features.
                -->
                <basicHttpBinding>
                    <binding name="Binding1" hostNameComparisonMode="StrongWildcard"
                        receiveTimeout="00:10:00"
                        sendTimeout="00:10:00"
                        openTimeout="00:10:00"
                        closeTimeout="00:10:00"
                        maxReceivedMessageSize="2147483647"
                        maxBufferSize="2147483647"
                        transferMode="Streamed"
                        messageEncoding="Text"
                        bypassProxyOnLocal="false"
                        useDefaultWebProxy="true"
                        maxBufferPoolSize="2147483647">
                    <readerQuotas maxDepth="2000000" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
                    <security mode="None" />
                </binding>
            </basicHttpBinding>
        </bindings>
        <behaviors>
            <serviceBehaviors>
                <behavior name="ServiceBehaviour">
                    <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
                    <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
                    <serviceMetadata httpGetEnabled="true"/>
                    <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
                    <serviceDebug includeExceptionDetailInFaults="false"/>
                </behavior>
            </serviceBehaviors>
            <endpointBehaviors>
                <behavior name="web">
                    <dataContractSerializer maxItemsInObjectGraph="2147483647"/>    
                </behavior>
            </endpointBehaviors>
        </behaviors>
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
    </system.serviceModel>
    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
    </system.webServer>
    <system.web>
        <httpRuntime maxRequestLength="2097151" />
    </system.web>
</configuration>

和我的app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <client>
            <endpoint address="http://localhost:55008/RestServiceImpl.svc"
                binding="basicHttpBinding"
                bindingConfiguration="BasicHttpBinding_IRestServiceImpl"
                contract="ServiceReference1.IRestServiceImpl"      name="BasicHttpBinding_IRestServiceImpl"/>
        </client>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IRestServiceImpl"
                    hostNameComparisonMode="StrongWildcard"
                    receiveTimeout="00:10:00"
                    sendTimeout="00:10:00"
                    openTimeout="00:10:00"
                    closeTimeout="00:10:00"
                    maxReceivedMessageSize="2147483647"
                    maxBufferSize="2147483647"
                    transferMode="StreamedResponse"
                    messageEncoding="Text"
                    bypassProxyOnLocal="false"
                    useDefaultWebProxy="true"
                    maxBufferPoolSize="2147483647">
                    <readerQuotas maxDepth="2000000" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
                    <security mode="None" />
                </binding>
            </basicHttpBinding>
        </bindings>
    </system.serviceModel>
    <system.web>
        <httpRuntime maxRequestLength="2097151" />
    </system.web>
</configuration>
private void buttonSendToServer_Click(object sender, RoutedEventArgs e)
{
    imageCtrl.Source = null;
    ServiceReference1.RestServiceImplClient service = new ServiceReference1.RestServiceImplClient();
    foreach (MyBitmap bit in listBitmap)
    {
        string s;
        try
        {
            service.SendImage(bit.GetBytes(), bit.FileName);
        }
        catch (ProtocolException ex)
        {
            s = ex.ToString();
        }
    }
    service.Close();
}

共有1个答案

魏硕
2023-03-14

在WCF端(即,与IIS分离),您没有使用在服务配置文件(binding1)中定义的绑定:

<endpoint address="" binding="basicHttpBinding"
          contract="WcfService1.IRestServiceImpl" 
          behaviorConfiguration="web">

您指定了要使用的绑定类型,但是由于您没有指定要使用的配置,因此您将获得BasichttpBinding的默认设置。要指定绑定配置,请使用bindingconfiguration属性,如下所示:

<endpoint address="" binding="basicHttpBinding" 
          bindingConfiguration="Binding1"
          contract="WcfService1.IRestServiceImpl"
          behaviorConfiguration="web">

可能有其他配置,但从WCF的角度来看,这是最常见的原因。

 类似资料:
  • 问题内容: 寻找有关基于cf2010中的WCF REST模板40(CS)扩展的wcf 4 rest服务的指南。我花了最后两天的时间来尝试使该Bugger正常工作,并复习其他帖子,尽管我已经接近了,但似乎无法越过终点。经过很多挫败之后,它最终到达了服务并发布(使用fiddler请求构建器),但是method参数作为null出现,但已在请求构建器中正确设置。我猜这可能是配置问题,但是由于截止日期迫在眉

  • 我们有一个场景,(UDP客户端程序)向(UP服务器)发送UDP数据包 TCP在数据通信开始之前和结束之后执行握手。UDP没有。 那么,运行在上的应用程序失败的原因是否是上的服务器程序没有准备好(关闭)接收UDP数据包?

  • 我正在尝试从Android向我的php服务器提交数据。然而,所有的答案似乎都使用了不推荐使用的ApacheHTTP库。我不想用它,当我试着用的时候,它不起作用。 现在它似乎什么也没做。它似乎连接到web服务器,但服务器不写入任何数据。如果我只是用浏览器访问url,它会写入一个文件。 php代码是 然后在Android studio中,我会在按下按钮后放入所有代码

  • 本文向大家介绍wcf 向服务添加元数据终结点,包括了wcf 向服务添加元数据终结点的使用技巧和注意事项,需要的朋友参考一下 示例 SOAP服务可以发布描述客户端可以调用的方法的元数据。客户端可以使用诸如Visual Studio之类的工具来自动生成代码(称为客户端代理)。代理隐藏了调用服务的复杂性。要调用服务,只需在客户端代理上调用一种方法。 首先,您必须将元数据终结点添加到服务中。假设您的服务看

  • XMLHttpRequest 对象用于和服务器交换数据。 向服务器发送请求 如需将请求发送到服务器,我们使用 XMLHttpRequest 对象的 open() 和 send() 方法:xmlhttp.open("GET","ajax_info.txt",true); xmlhttp.send(); 方法 描述 open(method,url,async) 规定请求的类型、URL 以及是否异步处理

  • 我对妮蒂很陌生。我目前正在编写一个非常简单的Echo客户端和服务器,但是我尝试从客户端向服务器发送< code>byte[]而不是String或ByteBuf。我成功地用字符串消息编写了相同的客户机\服务器。 在相同的代码中,我只是将“解码器\编码器”改为使用< code>byte[]。 我在下面张贴我的代码。 -启动客户端的主类 - Define pipeline - 主客户端处理程序 -启动服