小编And*_*mer的帖子

从wcf绑定transferMode从"Buffered"更改为"Streamed"是否被认为是客户端的重大变化?

我有一个WCF服务端点,通过流提供二进制文档.端点看起来像这样:

public Stream GetFile(int fileId){
...
}
Run Code Online (Sandbox Code Playgroud)

此服务端点的basicHttpBinding错误地配置为使用TransferMode ="Buffered".服务端点当前由我控制之外的各方使用.由于缓冲传输模式的内存消耗问题,我想将其更改为TransferMode ="Streamed".

我是否可以安全地对服务绑定配置进行此更改并期望这不会破坏任何集成方的任何内容?

.net c# wcf wcf-binding

16
推荐指数
1
解决办法
3471
查看次数

如何在DataGrid上设置d:DataContext d:DesignInstance

xaml:

    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <TextBox VerticalAlignment="Center" FocusManager.IsFocusScope="True" Grid.ColumnSpan="2" Name="SearchTextBox" Text="{Binding Path=SearchTerm.Value, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource FontStyle}" KeyUp="SearchTextBoxKeyUp" />

    <DataGrid Grid.Row="1" ItemsSource="{Binding Path=EpisodesView, Mode=TwoWay}" MouseDoubleClick="ListViewDoubleClick" Style="{StaticResource FontStyle}" KeyUp="ListViewKeyup" Name="EpisodeList" AutoGenerateColumns="False" IsReadOnly="True"
              d:DataContext="{d:DesignInstance vm:Episode}">
        <DataGrid.Columns>
            <DataGridTextColumn Header="File" Binding="{Binding File.Name}" />
            <DataGridTextColumn Header="Age" Binding="{Binding PrettyAge}" SortMemberPath="Age" />
        </DataGrid.Columns>
    </DataGrid>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

在上面的xaml底部的DataGrid中,我无法获得设计时间d:DataContext DesignInstance引用对于DataGrid本身的绑定和特定列的绑定都是正确的.

如果我在DataGrid中包含以下代码片段(如上面的xaml)那么DataGridTextColumns可以工作,并且我得到了列绑定的intellisense:

d:DataContext="{d:DesignInstance vm:Episode}
Run Code Online (Sandbox Code Playgroud)

但现在DataGrid绑定智能感知不再有效.如果我删除上面的代码片段,则反向发生:Intellisense for DataGrid绑定有效,但列绑定不起作用.

为清楚起见,这只是一个设计时问题.一切运行良好的运行时.

.net wpf xaml

8
推荐指数
1
解决办法
3508
查看次数

OData v4 web api中的可选函数参数

是否可以定义可选参数,或者将空值作为参数传递到Web API中的OData v4函数中?

鉴于此函数定义:

ODataConventionModelBuilder builder
var config = builder.EntityType<model.MyType>()
    .Collection
    .Function("Myfunction")
    .ReturnsCollectionFromEntitySet<model.MyType>("MyType");
config.Parameter<int>("Id");
config.Parameter<string>("SomeString");
Run Code Online (Sandbox Code Playgroud)

和这个控制器动作:

[HttpGet]
public System.Web.OData.PageResult<model.MyType> MyFunction(int id, string someString)
{
    return ...;
}
Run Code Online (Sandbox Code Playgroud)

我试过用这些方法调用这个函数:

odata/MyType/Namespace.MyFunction(Id=123,SomeString='lalal')工作正常 odata/MyType/Namespace.MyFunction(Id=123)给我一个404 odata/MyType/Namespace.MyFunction(Id=123,SomeString='')给我一个400错误'一个值是必需的,但在请求中不存在. odata/MyType/Namespace.MyFunction(Id=123,SomeString=null)成功,但将字符串值'Microsoft.OData.Core.ODataNullValue'发送到控制器操作中的SomeString-paramater.我希望得到一个常规的空值.

测试版本:

  • Microsoft.AspNet.OData v5.4.0

升级到Microsoft.AspNet.OData v5.5.0-beta证明可以解决这个问题(部分).


进一步挖掘证明了ModelState对象无效.modelstate对象抱怨第三个(?)参数中存在错误,其中键为'someString.String'.错误是"值是必需的,但请求中不存在."

Fan Ouyang在https://github.com/VikingsFan/SampleForOData/tree/master/ODataFunctionSample提供的代码示例中可以轻松地重现该问题.只需运行示例并检查'CustomersController'中的ModelState继承的ModelState属性.

这似乎是asp.net web api中的一个错误.我更改了我的ModelState逻辑,忽略了包含'.'的任何模型状态键,但这只是潜在问题的解决方法.

.net odata asp.net-web-api

1
推荐指数
1
解决办法
3935
查看次数

标签 统计

.net ×3

asp.net-web-api ×1

c# ×1

odata ×1

wcf ×1

wcf-binding ×1

wpf ×1

xaml ×1